3

重複の可能性:
Java の値で Map<Key, Value> をソートする方法は?

次のようなマップがあるとします

Map<String, Student> studDetails = new HashMap<String, Student>();

そして、マップには次のようなエントリが含まれています

studDetails.put("1",student1);
studDetails.put("2",student2);
studDetails.put("3",student3);
studDetails.put("4",student4);

学生エンティティは次のようなものです

Class Student{
           private String studName;
           private List<Group> groups;
}

グループエンティティは次のようになります

Class Group{
             private String groupName;
             private Date creationDate;
}

OK、学生の詳細を表示するときに必要なのは、グループの作成日順に表示されることです。したがって、学生が複数のグループにマッピングされている場合、最初のグループの creationDate を取得できます。

このシナリオを使用して HashMap にソーリングを与えるにはどうすればよいstudDetailsですか?

誰でも助けてくれますか..お願いします..

4

4 に答える 4

4

HashMap はソートされていません。SortedMapたとえば、代わりに実装を使用する必要がありますTreeMap

次に、実際のインスタンスの属性でComparator<String>ソートする独自のものを作成できますが、キーでソートするため、実際のマップが必要になるため、これは可能ですが良い解決策ではありません。groupsStudentTreeMap

だからとTreeMap

public class StudentGroupComparator implements Comparator<String> {
  private Map<String, Student> sourceMap;

  public StudentGroupComparator(Map<String, Student> sourceMap) {
    this.sourceMap = sourceMap;
  }

  @Override
  public int compare(String key1, String key2) {
    // TODO: null checks
    Student student1 = sourceMap.get(key1);
    Student student2 = sourceMap.get(key2);

    Date o1CreationDate = student1.groups.get().creationDate;
    Date o2CreationDate = student2.groups.get().creationDate;
    return o1CreationDate.compareTo(o2.creationDate);
  }
}


SortedMap<String, Student> sortedMap = new TreeMap<String, Student>(new StudentGroupComparator(sourceMap));
sortedMap.putAll(sourceMap);
于 2012-10-12T07:28:44.190 に答える
3

このシナリオを使用して、HashMap studDetailsに痛みを与えるにはどうすればよいですか?

は基本的に順序付けされていないため、できませんHashMap(または、少なくとも順序付けが不安定で役に立たない)。

のようなソートされたマップの場合でも、ソート順はではなくキーTreeMapに基づいています。

于 2012-10-12T07:28:21.753 に答える