Fak*_*ode 5 java java-8 java-stream
假设我有一个通过排序函数返回的点列表:
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);
Run Code Online (Sandbox Code Playgroud)
如何根据布尔标志 ( sortThePoints) 使排序(...) 成为条件,如下所示
points.stream()
if(sortThePoints){
.sorted((p1, p2)->p1.x.compareTo(p2.x))
}
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
您可以使用变量来打破链条:
Stream<Point> pointStream = points.stream();
if(sortThePoints) {
pointsStream = pointsStream.sorted((p1, p2)->p1.x.compareTo(p2.x));
}
pointsStream.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4779 次 |
| 最近记录: |