gpt4 book ai didi

java - 按子列表中的项目对 Java 列表进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:24:52 25 4
gpt4 key购买 nike

我有一个列表:

List<List<Item>> = [["a", "one", 3], ["b", "one", 2], ["c", "one", 4], ["d", "two", 2],["e", "one", 1], ["f", "two", 1]]

我想按子数组中的第二个值对它进行排序,如果有两个类似的值,则应按第三个值排序,如果从那里找到两个类似的值,则应按第一个元素对它们进行排序。所以最终结果应该是这样的:

[["e", "one", 1], ["b", "one", 2], ["a", "one", 3], ["c", "one", 4], ["f", "two", 1], ["d", "two", 2]]

有人可以告诉我一些好的方法吗?

谢谢!

最佳答案

["a", "one", 3]应该是你的类的实例,比如

class Item{
private String val1;
private String val2;
private int val3;
//getters and setters
}

这样您的列表将是 List<Item> .现在你可以简单地使用 Collections.sort(list, yourComparator)或者如果您使用的是 Java 8 list.sort(yourComparator) .

作为yourComparator您可以传递实现类的实例 Comparator接口(interface),例如以某种方式

Comparator<Item> yourComparator = new Comparator<Item>() {

@Override
public int compare(Item o1, Item o2) {
//comapre val2
int result = o1.getVal2().compareTo(o2.getVal2());
if (result != 0) return result;

//if we are here val2 in both objects ware equal (result was 0)
result = Integer.compare(o1.getVal3(), o2.getVal3());
if (result != 0) return result;

return o1.getVal1().compareTo(o2.getVal1());
}
};

但可能更具可读性和更简单的方法是为每个字段创建单独的比较器并将它们组合起来。如果您使用的是 Java 8,您的代码可能如下所示:

Comparator<Item> val1Comparator = Comparator.comparing(Item::getVal1);
Comparator<Item> val2Comparator = Comparator.comparing(Item::getVal2);
Comparator<Item> val3Comparator = Comparator.comparingInt(Item::getVal3);


list.sort(val2Comparator
.thenComparing(val3Comparator)
.thenComparing(val1Comparator));

关于java - 按子列表中的项目对 Java 列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757839/

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