函数式编程的实质是把函数当成了一个变量,可以作为参数传递,也可以作为返回值返回。
https://www.liaoxuefeng.com/wiki/1252599548343744/1305158055100449
https://www.liaoxuefeng.com/wiki/1252599548343744/1305207799545890
一些实例
函数式编程实例
Arrays.sort(array, (s1, s2) -> {
return s1.compareTo(s2);
});
替代
Arrays.sort(array, new Comparator<String>() {
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
如果只有一行return xxx的代码,完全可以用更简单的写法:
Arrays.sort(array, (s1, s2) -> s1.compareTo(s2));
xxx :: new (方法引用使用一对冒号 ::)
List 转 List
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
}
List<String> names = ....;
names.stream().map(Person::new).collect(Collectors.toList());
本来我一般写法会写 map(r -> new Person(r))
而 r -> new Person(r) 实际就是一个没有函数名的函数定义。参数就是String r,函数体是 return new Person(r)。而String参数类型生命 和 return都不需要写,编译器会自动解析。
以上在map方法里直接写了Person::new,其实是Person的构造方法 正好满足 一个 functional interface
Person::new 的写法 其实就是传入的Person的构造函数这个函数引用,他也满足functional interface 的标准,入参也是 stream的元素 的类型,这里是String, 返回Person实例。构造函数虽然没有显示return,但它实际是return this;
我们把只定义了单方法的接口称之为FunctionalInterface