我没有找到所需信息,所以我决定创建一个新问题。
我有一个小测试应用,我想按值排序我的Map。但我无法理解为什么我不能通过以下方式做到这一点:
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
public class Test {
public int test(int [] array) {
Map<Integer, Integer> map = new HashMap<>();
map.put(1,4);
map.put(2,3);
map.put(5,1);
map.put(7,0);
map.put(4,4);
map.put(9,1);
Collections.sort(map.entrySet(), new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> t, Map.Entry<Integer, Integer> t1) {
return t.getValue().compareTo(t1.getValue());
}
});
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
sum += entry.getValue();
}
return sum;
}
}
和主要课程:
public class Main {
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.test(arr));
}
}
在这种情况下,这个应用程序将返回14。但我有这个消息 Collections.sort(...)部分:
集合中的sort(java.util.List,java.util.Comparator)无法应用于 (java.util.Set中&gt;中 匿名 了java.util.Comparator&GT) 原因:没有类型变量T的实例存在 集&gt;符合List
但如果我将其更改为 Collections.min(...)或 Collections.max(...):
Collections.min(map.entrySet(), new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> t, Map.Entry<Integer, Integer> t1) {
return t.getValue().compareTo(t1.getValue());
}
});
没有问题。
答案 0 :(得分:1)
无法按值对Java Map进行排序。但您可以从Map.entrySet()
创建列表,也可以根本不需要集合。
使用List和Comparator。
List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
list.sort(Comparator.comparing(Map.Entry::getValue));
使用Stream
map.entrySet().stream()
.sorted(Comparator.comparing(Map.Entry::getValue))
//do something here