
上QQ阅读APP看书,第一时间看更新
1.5 其他的流转换
distinct方法会返回一个流,它的元素是从原有流中产生的,即原来的元素按照同样的顺序剔除重复元素后产生的。这个流显然能够记住它已经看到过的元素。

对于流的排序,有多种sorted方法的变体可用。其中一种用于操作Comparable元素的流,而另一种可以接受一个Comparator。下面,我们对字符串排序,使得最长的字符串排在最前面:

与所有的流转换一样,sorted方法会产生一个新的流,它的元素是原有流中按照顺序排列的元素。
当然,我们在对集合排序时可以不使用流。但是,当排序处理是流管道的一部分时,sorted方法就会显得很有用。
最后,peek方法会产生另一个流,它的元素与原来流中的元素相同,但是在每次获取一个元素时,都会调用一个函数。这对于调试来说很方便:

当实际访问一个元素时,就会打印出来一条消息。通过这种方式,你可以验证iterate返回的无限流是被惰性处理的。
对于调试,你可以让peek调用一个你设置了断点的方法。
java.util.stream.Stream 8
·Stream<T>distinct()
产生一个流,包含当前流中所有不同的元素。
·Stream<T>sorted()
·Stream<T>sorted(Comparator<?super T>comparator)
产生一个流,它的元素是当前流中的所有元素按照顺序排列的。第一个方法要求元素是实现了Comparable的类的实例。
·Stream<T>peek(Consumer<?super T>action)
产生一个流,它与当前流中的元素相同,在获取其中每个元素时,会将其传递给action。