java - 在java流中重写算法更省力?

标签 java arrays function java-8 java-stream

我正在学习 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/

相关文章:

javascript - 从命令行解析多个参数 Node.js/js

java - 如何使用另一个 JLabel 控制 Java Swing JLabel

java - maven-install-plugin 如何与 pom 配置一起使用一次安装一些 jar

java - 连接到 SOCKS5 代理以在 Java 中执行 FTP/S

java - 通过每次传递打印数组(冒泡排序)

java - (Azure SDK java)如何使用Java程序启用/禁用每个功能

c++ - 如何使用以下约束动态创建固定长度字符串数组

c - 在 C 中返回指向字符串的指针时出现问题

javascript - 如何向一个文件添加多个函数?

c++ - 在 int main() [c++] 中实现递归函数