Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按字符串[索引]对hashmap字符串、集合>进行排序_Java_Collections_Hashmap_Sorting - Fatal编程技术网

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>>();