gpt4 book ai didi

java - 寻找可排序对的数据结构的建议

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

我正在寻找一种数据结构,我可以存储一对IntegerString
我将能够对其进行两次排序:一次按整数降序排序,一次按词汇顺序排序。

我还希望能够动态添加新的对。

例如:{(13,a)(12,d) (9,a)}

按数字排序:{(13, a) (12, d) (9,a)}

按词汇顺序排序:{(9, a) (13, a) (12, d)}

你有什么建议?

最佳答案

创建一个类Pair它保存一个整数和一个字符串:

public class Pair {
private Integer num;
private String text;

public Pair(Integer num, String text) {
this.num = num;
this.text = text;
}

public Integer getNum() { return num; }
public String getText() { return text; }
}

List<Pair> list = new ArrayList<>();
list.add(new Pair(13, "a"));
list.add(new Pair(12, "d"));
list.add(new Pair(9, "a"));

Java 8 在排序时确实支持自定义内联比较器,但在您的情况下,您似乎需要两级排序,首先按数字排序,然后按文本排序(对于其他比较器反之亦然)。在本例中,我们定义两个自定义比较器。第二个排序条件是通过 Comparator#thenComparing() 添加的以链接方式的方法。然后,我们将流转换为实际的排序列表。

Comparator<Pair> c1 = Comparator.comparing(pair -> -pair.num);
c1 = c1.thenComparing(Comparator.comparing(pair -> pair.text));
Stream<Pair> pairStream = list.stream().sorted(c1);

List<Pair> sortedPairs = pairStream.collect(Collectors.toList());

System.out.println("Sorting descending by number:");
for (Pair p : sortedPairs) {
System.out.println("(" + p.getNum() + ", " + p.getText() + ")");
}

Comparator<Pair> c2 = Comparator.comparing(pair -> pair.text);
c2 = c2.thenComparing(Comparator.comparing(pair -> pair.num));
pairStream = list.stream().sorted(c2);

sortedPairs = pairStream.collect(Collectors.toList());

System.out.println("Sorting ascending by text:");
for (Pair p : sortedPairs) {
System.out.println("(" + p.getNum() + ", " + p.getText() + ")");
}

输出:

Sorting descending by number:
(13, a)
(12, d)
(9, a)
Sorting ascending by text:
(9, a)
(13, a)
(12, d)

此处演示:

Rextester

关于java - 寻找可排序对的数据结构的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46390608/

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