java - 如何在 Java 8 中创建条件排序
问题描述
假设我有一个使用排序函数返回的点列表:
List<Point> points = new ArrayList<>();
points.add(new Point(3, 30));
points.add(new Point(1, 10));
points.add(new Point(2, 20));
points.stream()
.sorted((p1, p2)->p1.x.compareTo(p2.x))
.forEach(System.out::println);
如何根据布尔标志 ( sortThePoints
) 使 sorted(...) 有条件,如下所示
points.stream()
if(sortThePoints){
.sorted((p1, p2)->p1.x.compareTo(p2.x))
}
.forEach(System.out::println);
解决方案
Stream.sorted(Comparator)
如果流是有序的,则进行稳定排序。换句话说,如果两个元素相等,那么它们将保持它们的初始顺序。
static final Comparator<Point> identityComparator = (p1, p2) -> 0;
Comparator<Point> normalComparator = (p1, p2)->p1.x.compareTo(p2.x);
(or Comparator<Point> normalComparator = Comparator.comparing(p -> p.x))
points.stream()
.sorted(sortThePoints ? normalComparator : identityComparator)
.forEach(System.out::println);
推荐阅读
- c# - Livecharts C# Winforms 从 SQL 获取数据
- java - Android:如何在不调整图像大小的情况下以编程方式更改 ImageView 的宽度?
- javascript - 如何使图像的计算框与图像相应地重新缩放?使其完全响应
- node.js - 如何知道客户回复了哪封电子邮件
- azure - 使用 ARM 将 pfx 证书部署到 Azure 时出现问题,InternalServerError
- c# - 未提供 InitialDelaySeconds 时,Liveness Probe 失败
- woocommerce - Woocommerce Shipping 相关查询
- python - Pandas:以编程方式为列名添加后缀,同时在 concat 之后删除常用列
- python - 将宏值传递给气流中的sql文件
- javascript - 换字方法