流内和流

时间:2018-11-09 07:42:59

标签: java java-stream

两者之间有什么区别?他们是同一回事吗?

流内API

过滤器

Stream<T> filter(Predicate<? super T> predicate)

返回由该流中与给定谓词匹配的元素组成的流。

这是一个中间操作。

mapToInt

IntStream mapToInt(ToIntFunction<? super T> mapper)

返回IntStream,该结果由将给定函数应用于此流的元素的结果组成。

这是一个中间操作。

Filter返回stream,而mapToInt返回IntStream

2 个答案:

答案 0 :(得分:3)

IntStream-> Streamint

Stream-> Stream中的Objects(包括IntegerDoubleLongString等的任何对象)

答案 1 :(得分:1)

他们是同一回事吗?
两者都在扩展BaseStream。因此,它们具有公共接口。但是方法filtermapToInt不属于此接口。

两者之间有什么区别?
Stream<T>Stream的{​​{1}},其中TT的通用类型参数。由于泛型类型参数不能将原始类型作为类型参数,因此无法声明Stream。为了拥有原始整数流,已经定义了专用类型Stream<int>

如果您有IntStream,并且想使用Stream<Integer>提供的方法(即IntStreammin()),则需要先转换{{1} }元素转换为toArray()元素。这是应用于Integer的方法int的任务,将返回mapToInt。要将元素转换为Stream<T>,此方法需要进行实际映射/转换的IntStream

例如:

int

这显示了Function方法,该方法应用于 int[] arrayOfPositiveInts = Stream.of(0, 1, 2, 3, 4) .filter(i -> i > 0) .mapToInt(Integer::intValue) .toArray(); ,但使用unboxingfilter元素与Stream<Integer> Integer进行比较。方法int使用方法0mapToInt显式返回相应的Integer.intValue()值。

由于取消装箱,您还可以使用:

Integer

但是int的实现也无法实现:

.mapToInt(i -> i)

因为它(JavaDoc):

  

始终返回其输入参数。

Function.identity()的类型为.mapToInt(Function.identity(),而Stream的期望值为Integer

摘要:
mapToIntint之间的区别(根据此问题的标题)是流元素的类型。 Stream处理任意reference typesIntStream是专用类型,与primitive Stream类型的元素相关。当然,两种类型都提供不同的方法。