Java 如何按字符串[索引]对hashmap字符串、集合>进行排序
我想对这张地图进行排序:Java 如何按字符串[索引]对hashmap字符串、集合>进行排序,java,collections,hashmap,sorting,Java,Collections,Hashmap,Sorting,我想对这张地图进行排序: Map<String, Collection<String[]>> map = new HashMap<String, Collection<String[]>>(); 我想做: Collection<String[]> values = map.get(key); 第二次排序后: Mykey : [["John", "21", "M"], ["Eve", "31", "W"]]; 使用API java.
Map<String, Collection<String[]>> map = new HashMap<String, Collection<String[]>>();
我想做:
Collection<String[]> values = map.get(key);
第二次排序后:
Mykey : [["John", "21", "M"], ["Eve", "31", "W"]];
使用API java.util.Collections.sortList,Comparator c指定一个Comparator,并按照您的意愿实现它,一个用于名称,另一个用于年龄
另外,不要使用字符串[]{name,age,gender}作为元素,而是创建一个类Person,将这些变量作为成员。我可能会将您想要的两个比较器也放在这个类中:
public static final Comparator<Person> AGE_COMPARATOR = new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
// implement
}
};
假设您使用了列表界面而不是@Vatev建议的集合界面:
Map<String, List<Person>> map = new HashMap<String, List<Person>>();
在我看来,您的代码就像是Ruby等动态语言的开发人员编写的代码。您可能会发现这不是使用Java的最佳途径。您应该使用包含这些字符串作为属性的适当对象对字符串[]进行建模 另外,我认为你问题的映射部分不是很相关,你实际上是在处理一个对象集合,你需要按其中一个属性排序。在一个地图中碰巧有几个这样的集合不会影响解决方案 排序本身是按照@Havard Geithus的建议进行的。不一定要对集合进行排序。您可能想改用列表。
Mykey : [["John", "21", "M"], ["Eve", "31", "W"]];
public static final Comparator<Person> AGE_COMPARATOR = new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
// implement
}
};
Collections.sort(map.get(key), Person.AGE_COMPARATOR);
Map<String, List<Person>> map = new HashMap<String, List<Person>>();