java – 使用比较器对列表进行排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用比较器对列表进行排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1949字,纯文字阅读大概需要3分钟。
内容图文
![java – 使用比较器对列表进行排序](/upload/InfoBanner/zyjiaocheng/728/e109b9247e97497fa7cadcc5d5f5773f.jpg)
我正在寻找使用比较器整理列表列表(在ArrayLists上).订单最大的地方.所有子列表将始终具有相同的大小.
例如,列表
[[4,5,6], [7,9,10], [4,7,8], [1,2,3], [7,9,12]]
这应该
[[7,9,12], [7,9,10], [4,7,8], [4,5,6], [1,2,3]]
我有这样的东西,但只按每个列表中的第一项排序
List<List<Integer>> list = Arrays.asList(
Arrays.asList(4,5,6),
Arrays.asList(7,9,10),
Arrays.asList(4,7,8),
Arrays.asList(1,2,3),
Arrays.asList(7,9,12));
list.sort((l1, l2) -> l2.get(0).compareTo(l1.get(0)));
哪个产生:
[[7, 9, 10], [7, 9, 12], [4, 5, 6], [4, 7, 8], [1, 2, 3]]
如何编写一个比较器,如果前面的项目相等,它将按列表中的下一项进行排序?
例如,[7,9,10],[7,9,12]应该比较两个7,然后是两个9然后是10和12.例如,[4,5,6],[4, 7,8]应该比较两个4,然后4和7然后停止.
解决方法:
您可以这样定义比较器:
Comparator<List<Integer>> comparator = (list1, list2) -> {
for (int i = 0; i < list1.size(); i++) {
int value = Integer.compare(list2.get(i), list1.get(i));
if (value != 0)
return value;
}
return 0;
};
要么:
Comparator<List<Integer>> comparator = (list1, list2) ->
IntStream.range(0, list1.size())
.map(i -> Integer.compare(list2.get(i), list1.get(i)))
.filter(value -> value != 0)
.findFirst()
.orElse(0);
然后排序:
list.sort(comparator);
更新:
您可以通过创建一个返回比较器的自定义泛型函数来进一步概括:
static <T extends Comparable<T>> Comparator<List<T>> comparator(){
return (o1, o2) -> IntStream.range(0, o1.size())
.map(i -> o2.get(i).compareTo(o1.get(i)))
.filter(value -> value != 0)
.findFirst()
.orElse(0);
}
现在你可以这样做:
List<List<Integer>> integerList = Arrays.asList(
Arrays.asList(4,5,6),
Arrays.asList(7,9,10),
Arrays.asList(4,7,8),
Arrays.asList(1,2,3),
Arrays.asList(7,9,12));
integerList.sort(comparator()); // sort list of integers descending
List<List<String>> stringList = Arrays.asList(
Arrays.asList("a","b","c"),
Arrays.asList("d","e","f"),
Arrays.asList("g","h","i"));
stringList.sort(comparator()); // sort list of strings descending
等等……
注 – 我使用的是JDK 9,所以我不知道在JDK 8之前的版本中类型推断是否足够好.
内容总结
以上是互联网集市为您收集整理的java – 使用比较器对列表进行排序全部内容,希望文章能够帮你解决java – 使用比较器对列表进行排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。