首页 > 解决方案 > 如何在 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);

标签: javajava-8java-stream

解决方案


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);

推荐阅读