And*_*eas 7 java java-8 java-stream
以下陈述虽然没有意义,但在语法上看起来很合理.
final Stream<LongStream> foobar = IntStream.empty()
.flatMap(x -> IntStream.empty()
.mapToObj(y -> IntStream.empty()
.mapToLong(z -> 1))); //compilation error here on `z -> 1`
Run Code Online (Sandbox Code Playgroud)
但是它没有编译,返回:
java:不兼容的类型:lambda表达式中的错误返回类型没有类型变量的实例U存在以便java.util.stream.Stream符合java.util.stream.IntStream
但是,如果你延迟flatmap,一切正常:
final Stream<LongStream> foobar = IntStream.empty()
.mapToObj(x -> IntStream.empty()
.mapToObj(y -> IntStream.empty()
.mapToLong(z -> 1)))
.flatMap(x -> x);
Run Code Online (Sandbox Code Playgroud)
.mapToObj(..).flatMap(..)
和刚刚有.flatMap(..)
什么区别?有没有办法消除额外的flatmap调用?
.mapToObj(..).flatMap(..)
并.flatMap(..)
期望完全不同的签名.
.mapToObj(..).flatMap(..)
期待一个int -> Object
功能和一个Object -> Stream<?>
功能.
.flatMap(..)
期待一个int -> IntStream
功能.
如果您分解代码,则传递的int -> Stream<LongStream>
函数与int -> IntStream
函数不兼容.
这个简化的代码你会遇到同样的错误:
IntStream.empty().flatMap(x -> Stream.of(LongStream.empty()));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16827 次 |
最近记录: |