1. 函数式接口:实际上感觉基本体现在参数的配置上

    • Function:<T,R> 参数很正常,参数->结果

      • R apply(T t) 相当于方法的调用
      • compose(Function before) 先调用before再调用本身
      • andThen(Function after) 与上面的相反
    • Predict:<T, boolean> 返回为boolean

      • boolean test(T t) 相当于方法的调用
      • and(Predict) 与
      • or(Predict) 或
      • negate 取反
    • Supplier: 没有参数传入,直接返回一个结果,相当于new的感觉

      • get() 方法的调用
    • Consumer: 没有参数返回,直接消费参数

      • accept(T t) 方法的基本调用
      • andThen(Consumer after) 和function的andThen基本一致
    • 以上基本上都是单参数的,多参数可以有BiFunction、Bixxx等,应用方法基本一致

  2. 一些基本的应用场景

    • stream
    IntPredicate filteThree = (i) -> i%3 != 0;
            IntStream.range(1, 10)
                    .filter(filteThree)//当然如果不复用而且简单,优先直接lambda吧
                    .forEach(System.out::println);
    
    • optional 像类似这种一般需要把函数当做参数传递的基本都很适合