函数式编程的实质是把函数当成了一个变量,可以作为参数传递,也可以作为返回值返回。
https://www.liaoxuefeng.com/wiki/1252599548343744/1305158055100449
https://www.liaoxuefeng.com/wiki/1252599548343744/1305207799545890

一些实例

函数式编程实例

  1. Arrays.sort(array, (s1, s2) -> {
  2. return s1.compareTo(s2);
  3. });
  4. 替代
  5. Arrays.sort(array, new Comparator<String>() {
  6. public int compare(String s1, String s2) {
  7. return s1.compareTo(s2);
  8. }
  9. });
  10. 如果只有一行return xxx的代码,完全可以用更简单的写法:
  11. Arrays.sort(array, (s1, s2) -> s1.compareTo(s2));


xxx :: new (方法引用使用一对冒号 ::

List 转 List

  1. public class Person {
  2. private String name;
  3. public Person(String name) {
  4. this.name = name;
  5. }
  6. }
  7. List<String> names = ....;
  8. 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