Nic*_*cky 5 java arrays function java-8 java-stream
我正在学习 Java 8 中的 Streams。
例如,如果我必须将一个数字加倍:
Arrays.stream(intArray).map(e->e*2).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
如果我必须对一个数字进行平方,那么我可以在下面使用:
Arrays.stream(intArray).map(e->e*e).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
但是,如果我必须使用"andThen"
method在同一个 Integer 数组上应用这两个函数java.util.function.Function
,我将通过以下方式进行:
Function<Integer, Integer> times2 = e -> e * 2;
Function<Integer, Integer> squared = e -> e * e;
Arrays.stream(intArray).map(times2.andThen(squared)).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
是否可以在单行中重写此(3 个语句),例如:
Arrays.stream(intArray).map(e->e*2.andThen(f->f*f)).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
这给了我一个编译器错误。有可能做到吗?
看起来 Java 并没有隐式地假定 lambda 表达式是特定的函数类型。我必须添加强制转换才能使其正常工作:
Arrays.stream( new int[]{ 1, 2, 3, 4 } )
.map( ( (IntUnaryOperator)( e -> e*2 ) ).andThen(f->f*f) )
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
我个人不喜欢这个,更喜欢使用双地图调用。我很想看到更好的主意。
归档时间: |
|
查看次数: |
206 次 |
最近记录: |