[英]Instream and Stream
两者有什么区别? 它们是一样的吗 ?
流内 API
筛选
Stream<T> filter(Predicate<? super T> predicate)
返回由与给定谓词匹配的此流的元素组成的流。
这是一个中间操作。
映射到整数
IntStream mapToInt(ToIntFunction<? super T> mapper)
返回一个IntStream
它包含将给定函数应用于此流的元素的结果。
这是一个中间操作。
Filter
返回一个stream
, mapToInt
返回一个IntStream
。
IntStream
-> 只有int
Stream
Stream
-> Stream
of Objects
(任何对象,包括Integer
、 Double
、 Long
、 String
等)
它们是一样的吗 ?
两者都在扩展BaseStream
。 因此它们有一个共同的接口。 但是filter
和mapToInt
方法不属于这个接口。
两者有什么区别?
Stream<T>
是一个Stream
的T
其中T
是的一般类型参数Stream
。 由于泛型类型参数不能将原始类型作为类型参数,因此无法声明Stream<int>
。 为了拥有原始整数流,已经定义了专用类型IntStream
。
如果您有一个Stream<Integer>
并且想要使用IntStream
类型提供的方法(即min()
、 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();
这显示了应用于Stream<Integer>
的filter
方法,但使用拆箱将Integer
元素与int
0
进行比较。 方法mapToInt
使用方法Integer.intValue()
为Integer
显式返回相应的int
值。
由于拆箱,您还可以使用:
.mapToInt(i -> i)
但是Function.identity()
的实现是一样的:
.mapToInt(Function.identity()
因为它( JavaDoc ):
始终返回其输入参数。
Stream
的类型是Integer
而mapToInt
需要一个int
。
总结:
Stream
和IntStream
之间的区别(根据这个问题的标题)是流元素的类型。 Stream
处理任意引用类型。 IntStream
是处理原始int
类型元素的专用类型。 当然,这两种类型都提供不同的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.