2017-11-23 15 views
-2

私はソートに関連するいくつかの質問を見ましたが、私は実際に欲しいものを達成できませんでした。Javaでarraylistをグループ化しソートする

私はこの

class User{ 
    String userName; 
    String phoneNumber; 

    public User(String userName, String phoneNumber) { 
     this.userName = userName; 
     this.phoneNumber = phoneNumber; 
    } 
} 

のようなクラスは、その後、私は私が

A-- Aca, Aka 
B-- BBc , Bla 
C-- Cda, Cla 
のように、アルファベット順に Userのユーザ名によってグループデータに望んでいたこの

ArrayList<User> users = new ArrayList<User>(); 
users.add(new User("Aca","223554")); 
users.add(new User("Ada","223544")); 
users.add(new User("Cda","323544")); 
users.add(new User("Bbc","323544")); 
users.add(new User("Bla","323544")); 
users.add(new User("Aka","123554")); 
users.add(new User("Cla","323544")); 

のようないくつかのデータを追加している必要があり

そして、後でそれをHashMapに入れたい。

Map<String,ArrayList<User>> userMap = new HashMap<String, ArrayList<User>>(); 

userMap.put("A", usersLisA); //usersLisA is an ArrayList of user whose name starts with A 
userMap.put("B", usersLisB); //usersLisB is an ArrayList of user whose name starts with B 

など。

それは電話帳、彼らはソートやグループ、ユーザーに留意しなければアルファベット順

ことの一つの方法のようなものですが、私はJava7に達成したいです。

ご協力いただければ幸いです。

+2

あなたは明らかに十分ではありません。周囲の文学はたくさんあります。 – Mena

+0

もっとやってみると、 'userName'でソートしてから、ループしてハッシュマップを埋め込むことができます。 –

+0

Userのequals hashCodeとcompareToを実装します。次に、HashMapの代わりにTreeMapを使用します。 –

答えて

1

あなたには2つのオプションがあります。

  • ステップ1:まずは見てみましょうあなたのArrayList<User> users上でループをし、中user.userNameを入れString[] usersArr
  • ステップ2:Collections.sort(Arrays.asList(usersArr));
  • ステップ3で配列をソート:int startIndex = 0を定義し、int endIndexソートされた配列とオーバー、およびループ:

    if((int) previousString.charAt(0) < (int) currentString.charAt(0)) { 
        endIndex = currentString_position-1; 
        TreeMap.put(previousString.charAt(0), usersArr.subList(startIndex, endIndex)); 
        startIndex = currentString_position; 
    } 
    

さて、Sを見てみましょうecondオプション:

  • ステップ1:あなたのクラスのユーザーのためのhashCodeをオーバーライドします()とのcompareTo()のuserNameにより、次のことができ、後で順番になるよう
  • ステップ2:Collections.sort(Arrays.asList(users));
  • ステップ3でのArrayListを並べ替え:前のオプションのステップ3と同じです。

HashMapをTreeMapに変更しました。 Map内のキーの順序が重要な場合は、TreeMapを使用する必要があります。これは、キーを反復処理するときに順序が整うためです。これをチェックしてくださいpost

この回答をお寄せいただければ幸いです。

関連する問題