Ste*_*eod 9 java java-8 java-stream
我目前这样做:
Set<Integer> integers = ... // sourced from elsewhere in code
IntStream intStream = integers.stream().mapToInt(value -> value);
Run Code Online (Sandbox Code Playgroud)
将值映射到值,将转换为Stream<Integer>to 似乎是多余的IntStream.有没有办法在没有冗余mapToInt(...)部分的情况下做到这一点?
不,你必须使用.mapToInt(value -> value)或(对我来说更好).mapToInt(Integer::intValue).由于Stream是通用类,它应该适用于任何通用流元素类型,因此它不可能添加一些简单的API的类型安全方式.例如,考虑接口中有asIntStream()方法Stream.它看起来肯定会更好:
IntStream intStream = integers.stream().asIntStream();
Run Code Online (Sandbox Code Playgroud)
但是,没有什么能阻止你为这种方法调用Stream<String>.Java中没有办法只启用为特定泛型参数调用方法.因此,在另一种类型的流上意外调用它将编译正常,但会导致运行时异常,这在静态类型语言中是不好的.但是使用.mapToInt(value -> value)或.mapToInt(Integer::intValue)强制进行类型检查:必须提供一个返回的函数int,因此请stringStream.mapToInt(value -> value)正确报告编译错误.
如果您真的在意,可以在项目中自由创建静态方法,如下所示:
public class Streams {
public static IntStream intStream(Collection<Integer> c) {
return c.stream().mapToInt(Integer::intValue);
}
}
Run Code Online (Sandbox Code Playgroud)
并使用它
IntStream intStream = Streams.intStream(integers);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
885 次 |
| 最近记录: |