gpt4 book ai didi

java - 按列表大小对映射中的条目进行排序

转载 作者:行者123 更新时间:2023-12-02 02:04:30 25 4
gpt4 key购买 nike

我有一个 Map,由 String 和相应的 List 组成。这些列表有不同的大小:

Map<String, List<String>> map = new LinkedHashMap<>();

List<String> l1 = new ArrayList<>();
List<String> l2 = new ArrayList<>();
List<String> l3 = new ArrayList<>();

l1.add("Str1");
l1.add("Str2");
l2.add("Str1");
l2.add("Str2");
l2.add("Str3");
l3.add("Str1");

map.put("Category A", l1);
map.put("Category B", l2);
map.put("Category C", l3);

我想按 List 的大小按降序对 Map 的条目进行排序。所以在我的例子中,最终结果应该是:

Category B: Str1, Str2, Str3
Category A: Str1, Str2
Category C: Str1

我尝试过:

for (Map.Entry<String, List<String>> entry : map.entrySet()) {
entry.getValue().sort(new Comparator<String>() {
public int compare(ArrayList a1, ArrayList a2) {
return a2.size() - a1.size();
}
});

但我得到:

java: <anonymous com.app.class> is not abstract and does not override abstract method compare(java.lang.String,java.lang.String) in java.util.Comparator

最佳答案

您可以引入另一个 Map 实例(这样可以保留插入顺序,例如 LinkedHashMap<K, V> ),并按照比较器规定的顺序在其中插入条目:

Map<String, List<String>> map = new LinkedHashMap<>();

List<String> l1 = new ArrayList<>();
List<String> l2 = new ArrayList<>();
List<String> l3 = new ArrayList<>();

l1.add("Str1");
l1.add("Str2");
l2.add("Str1");
l2.add("Str2");
l2.add("Str3");
l3.add("Str1");

map.put("Category A", l1);
map.put("Category B", l2);
map.put("Category C", l3);


LinkedHashMap<String, List<String>> descByValues = new LinkedHashMap<>();

map.entrySet()
.stream()
.sorted((e1, e2) -> e2.getValue().size() - e1.getValue().size())
.forEachOrdered(x -> descByValues.put(x.getKey(), x.getValue()));

然后:

descByValues
.forEach((k, v) -> System.out.println(k + ", " + v));

将输出:

Category B, [Str1, Str2, Str3]
Category A, [Str1, Str2]
Category C, [Str1]

关于java - 按列表大小对映射中的条目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68623972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com