如何按每个键值的大小对 LinkedHashMap 进行排序?
How sort a LinkedHashMap by the size of each key's value?
我有一个 LinkedHashMap< Integer, HashSet< Integer >>,我想根据键值大小的降序对键进行排序。我目前有来自另一个线程的这个片段,但我不确定如何更改它以适应我的情况。
myMap.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(x,y) -> {throw new AssertionError();},
LinkedHashMap::new
));
这是我试过的方法
List<Map.Entry<String, Integer>> entries =
new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> a, Map.Entry<String,Integer> b){
return a.getValue().size().compareTo(b.getValue().size());
}
});
Map<String, Integer> sortedMap = new LinkedHashMap<String, Integer>();
for (Map.Entry<String, Integer> entry : entries) {
sortedMap.put(entry.getKey(), entry.getValue());
}
我刚刚在其中添加了 .size() 。我从这个线程中找到了它。我指的大小是 HashSet 中的项数。它通常只是 getValue().size() 但它在这里不起作用。
Sorting LinkedHashMap
您的尝试很接近。这是一个固定版本:
List<Map.Entry<Integer, Set<Integer>>> entries = new ArrayList<>(
map.entrySet());
Collections.sort(entries,
new Comparator<Map.Entry<Integer, Set<Integer>>>() {
public int compare(Map.Entry<Integer, Set<Integer>> a,
Map.Entry<Integer, Set<Integer>> b) {
return Integer.compare(
a.getValue().size(),
b.getValue().size());
}
});
Map<Integer, Set<Integer>> sortedMap = new LinkedHashMap<>();
for (Map.Entry<Integer, Set<Integer>> entry : entries) {
sortedMap.put(entry.getKey(), entry.getValue());
}
设置
LinkedHashMap<Integer, Set<Integer>> map = new LinkedHashMap<>();
map.put(1, new HashSet<>(Arrays.asList(1,2,3)));
map.put(2, new HashSet<>(Arrays.asList(1,2)));
map.put(3, new HashSet<>(Arrays.asList(1)));
和运行
System.out.println(sortedMap);
排序输出后
{3=[1], 2=[1, 2], 1=[1, 2, 3]}
我有一个 LinkedHashMap< Integer, HashSet< Integer >>,我想根据键值大小的降序对键进行排序。我目前有来自另一个线程的这个片段,但我不确定如何更改它以适应我的情况。
myMap.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(x,y) -> {throw new AssertionError();},
LinkedHashMap::new
));
这是我试过的方法
List<Map.Entry<String, Integer>> entries =
new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> a, Map.Entry<String,Integer> b){
return a.getValue().size().compareTo(b.getValue().size());
}
});
Map<String, Integer> sortedMap = new LinkedHashMap<String, Integer>();
for (Map.Entry<String, Integer> entry : entries) {
sortedMap.put(entry.getKey(), entry.getValue());
}
我刚刚在其中添加了 .size() 。我从这个线程中找到了它。我指的大小是 HashSet 中的项数。它通常只是 getValue().size() 但它在这里不起作用。
Sorting LinkedHashMap
您的尝试很接近。这是一个固定版本:
List<Map.Entry<Integer, Set<Integer>>> entries = new ArrayList<>(
map.entrySet());
Collections.sort(entries,
new Comparator<Map.Entry<Integer, Set<Integer>>>() {
public int compare(Map.Entry<Integer, Set<Integer>> a,
Map.Entry<Integer, Set<Integer>> b) {
return Integer.compare(
a.getValue().size(),
b.getValue().size());
}
});
Map<Integer, Set<Integer>> sortedMap = new LinkedHashMap<>();
for (Map.Entry<Integer, Set<Integer>> entry : entries) {
sortedMap.put(entry.getKey(), entry.getValue());
}
设置
LinkedHashMap<Integer, Set<Integer>> map = new LinkedHashMap<>();
map.put(1, new HashSet<>(Arrays.asList(1,2,3)));
map.put(2, new HashSet<>(Arrays.asList(1,2)));
map.put(3, new HashSet<>(Arrays.asList(1)));
和运行
System.out.println(sortedMap);
排序输出后
{3=[1], 2=[1, 2], 1=[1, 2, 3]}