按子列表中的项目对Java List进行排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了按子列表中的项目对Java List进行排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1565字,纯文字阅读大概需要3分钟。
内容图文
我有一个清单:
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接口的类的实例,例如以某种方式
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 List进行排序全部内容,希望文章能够帮你解决按子列表中的项目对Java List进行排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。