繁体   English   中英

插播和流媒体

[英]Instream and Stream

两者有什么区别? 它们是一样的吗 ?

流内 API

筛选

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

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

这是一个中间操作。

映射到整数

IntStream mapToInt(ToIntFunction<? super T> mapper)

返回一个IntStream它包含将给定函数应用于此流的元素的结果。

这是一个中间操作。

Filter返回一个streammapToInt返回一个IntStream

IntStream -> 只有int Stream

Stream -> Stream of Objects (任何对象,包括IntegerDoubleLongString等)

它们是一样的吗 ?
两者都在扩展BaseStream 因此它们有一个共同的接口。 但是filtermapToInt方法不属于这个接口。

两者有什么区别?
Stream<T>是一个StreamT其中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的类型是IntegermapToInt需要一个int

总结:
StreamIntStream之间的区别(根据这个问题的标题)是流元素的类型。 Stream处理任意引用类型 IntStream是处理原始int类型元素的专用类型。 当然,这两种类型都提供不同的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM