gpt4 book ai didi

java - 如何按键和值对 Map 进行排序,而 Val 本身就是一个 Map/List

转载 作者:行者123 更新时间:2023-12-03 18:42:03 26 4
gpt4 key购买 nike

我很难理解对 Maps 进行排序的正确语法,这些值不仅是一种类型,而且可以再次嵌套。我将尝试在这里提出一个合适的例子:

让我们先为它创建一个随机类:

class NestedFoo{
int valA;
int valB;
String textA;

public NestedFoo(int a, int b, String t){
this.valA = a;
this.valB = b;
this.textA = t;
}
}

好吧,那是我们类。列表来了:

HashMap<Integer, ArrayList<NestedFoo>> sortmePlz = new HashMap<>();

让我们首先创建 3 个条目,它们应该已经显示了排序工作。

ArrayList<NestedFoo> l1 = new ArrayList<>();
n1 = new NestedFoo(3,2,"a");
n2 = new NestedFoo(2,2,"a");
n3 = new NestedFoo(1,4,"c");
l1.add(n1);
l1.add(n2);
l1.add(n3);

ArrayList<NestedFoo> l2 = new ArrayList<>();
n1 = new NestedFoo(3,2,"a");
n2 = new NestedFoo(2,2,"a");
n3 = new NestedFoo(2,2,"b");
n4 = new NestedFoo(1,4,"c");
l2.add(n1);
l2.add(n2);
l2.add(n3);
l2.add(n4);

ArrayList<NestedFoo> l3 = new ArrayList<>();
n1 = new NestedFoo(3,2,"a");
n2 = new NestedFoo(2,3,"b");
n3 = new NestedFoo(2,2,"b");
n4 = new NestedFoo(5,4,"c");
l3.add(n1);
l3.add(n2);
l3.add(n3);
l3.add(n4);

好的,现在将它们放入我们的 map 中。

sortmePlz.put(5,l1);
sortmePlz.put(2,l2);
sortmePlz.put(1,l3);

我现在想要的是先按其键对整个 map 进行排序,因此顺序应为 l3 l2 l1。然后,我希望每个键内的列表按以下顺序排序:intA,intB,text(全部升序)

我不知道该怎么做。尤其是自 Java 8 以来所有那些 lambda,我试图阅读这个主题,但对那里的代码感到不知所措。

提前致谢!我希望代码没有语法错误,我在旅途中弥补了

最佳答案

您可以使用 TreeSet而不是常规的 HashMap并且您的值将按 key 自动排序:

Map<Integer, ArrayList<NestedFoo>> sortmePlz = new TreeMap<>();

第二步我有点困惑。

to be sorted by the following Order: intA,intB,text (all ascending)

我想您想通过先比较 intA 来对列表进行排序值,然后如果它们相等则比较 intB等等。如果我理解正确,你可以使用 ComparatorcomparingthenComparing .

sortmePlz.values().forEach(list -> list
.sort(Comparator.comparing(NestedFoo::getValA)
.thenComparing(NestedFoo::getValB)
.thenComparing(NestedFoo::getTextA)));

关于java - 如何按键和值对 Map 进行排序,而 Val 本身就是一个 Map/List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46600928/

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