import java.util.*;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
//...
List lower = Arrays.asList("a","b","c");
System.out.println(lower.stream().map(s -> s.toUpperCase()).collect(toList())); // outputs ["A", "B", "C"]
使用 Java 8 的流库来执行大写字母列表的相同任务。请注意,核心箭头运算符语法实际上与 JavaScript 相同,它们做同样的事情,即创建一个接受参数、执行逻辑并返回值的函数。(重要的是要注意,如果这样定义的函数体周围缺少大括号,则自动给出返回值。)
继续 Java,考虑双冒号运算符。该运算符允许您引用类上的方法:在本例中,toUpperCase是 String 类上的方法。不同的语法适用于不同的场景。
// ...
List upper = lower.stream().map(String::toUpperCase).collect(toList());
在上面的所有三个示例中,您可以看到高阶函数在起作用。map()两种语言中的函数都接受函数作为参数。
换句话说,您可以将函数传递给其他函数(在 Array API 中或以其他方式)作为函数接口。提供者函数(使用参数函数)是通用逻辑的插件。
这看起来很像 OOP 中的策略模式(实际上,在 Java 中,在幕后生成了具有单个方法