Java Streams - 如果比较器存在则排序

JDC*_*JDC 4 java sorting java-8 java-stream

我有一个类,可以指定一个可选Comparator.


由于Comparator是可选的,我必须评估它的存在并执行相同的流代码,有sorted()或没有:

if(comparator != null) {
    [...].stream().map()[...].sorted(comparator)[...];
} else {
    [...].stream().map()[...];
}
Run Code Online (Sandbox Code Playgroud)

问题:
如果没有代码重复,是否有更优雅的方法可以做到这一点?

注意:
默认Comparator不是一个选项,我只想保持我正在流式传输的值的原始顺序.

此外,这些元素已经映射在分拣点,所以我不能以某种方式引用流的根目录,因为我没有原始的元素了.

Era*_*ran 7

你可以这样做:

Stream<Something> stream = [...].stream().map()[...]; // preliminary processing
if(comparator != null) {
    stream = stream.sorted(comparator); // optional sorting
}
stream... // resumed processing, which ends in some terminal operation (such as collect)
Run Code Online (Sandbox Code Playgroud)

  • @AshishLohia我消除了代码重复. (5认同)
  • @AshishLohia嗯...请允许我不同意你的意见.这种方法是可读和正确的. (4认同)
  • @AshishLohia为什么总是在一个声明中做得更好?这会导致地图重复,这更糟糕. (2认同)
  • @Ashish Lohia:在一个声明中链接是一个好习惯,但这并不意味着它始终是最好的做法.您必须在良好实践和其他食品实践之间进行权衡,避免代码重复... (2认同)