21-结果分析
结果分析
本节使用如下4个方法过滤流中的元素。
distinct()
:该方法在当前流上根据元素的equals()
方法去除重复的元素,返回一个新的流。我们在例子中用Person
对象和int
型数字测试了这个方法。前面已经重写了Person
的equals()
和hashCode()
方法。如果不重写,则equals()
只在被比较的两个对象持有相同的引用时才返回true
。请注意,由于这个操作是有状态的,因此无法在并行流上获得性能优势(如Java文档所示,“……在并行计算中,有些流水线会包含有状态的中间操作,要求多次传递数据或需要缓存重要的数据……”)。filter()
:该方法接收一个Predicate
作为参数。可以使用一个返回值为boolean
型的lambda表达式来代表它。filter()
方法返回一个流,其元素由Predicate
验证为true
。limit()
:该方法接收一个int
值作为参数,返回一个元素数量不超过该值的流。在有序并行流上这个方法的性能会很差,特别是在要获取的元素数量很大的时候,因为这个方法会返回流中靠前的元素,而这意味着会有额外的计算。不过,这个问题不会出现在无序流中,因为无序流中哪个元素被返回都可以。skip()
:该方法丢弃流中靠前的一部分元素,返回一个新流。被丢弃的元素数量由参数指定。这个方法的性能问题和limit()
方法相同。