我正在学习 Java 8 中的 Streams。
例如,如果我必须将一个数字加倍:
Arrays.stream(intArray).map(e->e*2).forEach(System.out::println);
如果我必须对一个数进行平方,那么我可以使用下面的方法:
Arrays.stream(intArray).map(e->e*e).forEach(System.out::println);
但是如果我必须使用 "andThen"
方法 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);
是否可以像这样在单行中重写这个(3 个语句):
Arrays.stream(intArray).map(e->e*2.andThen(f->f*f)).forEach(System.out::println);
这给我一个编译器错误。有可能吗?
最佳答案
看起来 Java 并未隐式假定 lambda 表达式是特定的函数类型。我必须添加转换才能使其工作:
Arrays.stream( new int[]{ 1, 2, 3, 4 } )
.map( ( (IntUnaryOperator)( e -> e*2 ) ).andThen(f->f*f) )
.forEach(System.out::println);
我个人不喜欢这样,更愿意使用双 map 调用。我很想看到一个更好的主意。
关于java - 在java流中重写算法更省力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44356118/