两者之间有什么区别?他们是同一回事吗?
流内API
过滤器
Stream<T> filter(Predicate<? super T> predicate)
返回由该流中与给定谓词匹配的元素组成的流。
这是一个中间操作。
mapToInt
IntStream mapToInt(ToIntFunction<? super T> mapper)
返回IntStream
,该结果由将给定函数应用于此流的元素的结果组成。
这是一个中间操作。
Filter
返回stream
,而mapToInt
返回IntStream
。
答案 0 :(得分:3)
IntStream
-> Stream
仅int
Stream
-> Stream
中的Objects
(包括Integer
,Double
,Long
,String
等的任何对象)
答案 1 :(得分:1)
他们是同一回事吗?
两者都在扩展BaseStream
。因此,它们具有公共接口。但是方法filter
和mapToInt
不属于此接口。
两者之间有什么区别?
Stream<T>
是Stream
的{{1}},其中T
是T
的通用类型参数。由于泛型类型参数不能将原始类型作为类型参数,因此无法声明Stream
。为了拥有原始整数流,已经定义了专用类型Stream<int>
。
如果您有IntStream
,并且想使用Stream<Integer>
提供的方法(即IntStream
,min()
),则需要先转换{{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();
,但使用unboxing将filter
元素与Stream<Integer>
Integer
进行比较。方法int
使用方法0
为mapToInt
显式返回相应的Integer.intValue()
值。
由于取消装箱,您还可以使用:
Integer
但是int
的实现也无法实现:
.mapToInt(i -> i)
因为它(JavaDoc):
始终返回其输入参数。
Function.identity()
的类型为.mapToInt(Function.identity()
,而Stream
的期望值为Integer
。
摘要:
mapToInt
和int
之间的区别(根据此问题的标题)是流元素的类型。 Stream
处理任意reference types。 IntStream
是专用类型,与primitive Stream
类型的元素相关。当然,两种类型都提供不同的方法。