Java学习笔记(2)使用java.util.function包定义Lambda

上节提到Lambda是实例化单抽象方法接口(函数式接口)的语法糖。

那么我们在使用Lambda的时候,第一步是否需要先去构建一些接口呢? 如我们想写一个打印的Lambda, 我们必须先构建一个接口:

// 想用Lambda? 先定义一个接口吧
interface Printable {
    String print();
}

public class Example {
    public static void main(String args[]) {
        Printable printer1 = () -> "Print something";
        System.out.println(printer1.print());
    }
}

使用Lambda先定义接口?

Java8给我们定义了一些函数式接口,这些接口在 java.util.function包里面,主要分成下面四种:

  • Consumer接口: 接受一个参数,但不返回(consumer也有消费者的意思)
  • Suplier接口:不接收参数,但返回一个值(Suplier也有供应者的意思)
  • Predicate接口: 接受一个参数,返回true或者false(predicate也有断定的意思)
  • Function接口: 接受一个参数,返回一个值

上面我们提到的Printable接口,就可以用Suplier接口定义:

   public static void main(String args[]) {
        Supplier printer2 = () -> "Print something";
        System.out.println(printer2.get());
    }

其实,function包最多的还是用在stream和数组、list等操作。如:

  • Iterable接口的foreach方法:

    void forEach(Consumer action)
    
  • Stream.allMatch(Predicate predicate) // 使用Predicate做筛选
  • Stream.map中,使用Function接口做map
  • Optional.orElseGet方法中,使用Suplier获取一个值

你可能感兴趣的:(Java学习笔记(2)使用java.util.function包定义Lambda)