四大函数式接口(必备)
程序员:泛型、反射、注解、枚举
新时代程序员:lambda表达式、链式编程、函数式接口、Stream流式计算
函数式接口:只有一个方法的接口
            
            
              java
              
              
            
          
          @FunctionalInterface
public interface Runnable {
    public abstract void run();
}
//@FunctionalInterface 函数式接口,超级多
//简化编程模型,在新版本的框架中大量应用!
//foreach(消费者类的函数式接口)
四大函数式接口:Consumer、Function、Predicate、Supplier
Function

- Function 函数式接口 R apply(T t); 输入一个T类型的参数,返回一个R类型的值
- 只要是函数式接口都可以用lambda表达式简化
简化前:
            
            
              java
              
              
            
          
          Function ft = new Function<String,String>() {
    @Override
    public String apply(String str) {
        return str;
    }
};简化后:
            
            
              java
              
              
            
          
          Function ft = (str)->{return str;};更加简化后:
            
            
              java
              
              
            
          
          Function ft = str->{return str;};Predicate

- 
Predicate 断定型接口 有一个输入参数,返回类型只能是boolean值 
- 
同样是一个函数式接口,可以简化 简化前: javaPredicate<String> pr = new Predicate<String>() { @Override public boolean test(String str) { return str.isEmpty(); } };简化后: javaPredicate<String> pr = str ->{return str.isEmpty();};
Comsumer

- Comsumer 消费者接口 有一个输入参数,没有返回值
- 同样可以简化
简化前:
            
            
              java
              
              
            
          
          Consumer<String> stringConsumer = new Consumer<>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
};简化后:
            
            
              java
              
              
            
          
          Consumer<String> stringConsumer = str ->{
    System.out.println(str);
};Supplier

- Supplier 供给者接口 没有参数只有一个返回值
- 同样可以简化
简化前:
            
            
              java
              
              
            
          
          Supplier<String> stringSupplier = new Supplier<>() {
    @Override
    public String get() {
        return "我的世界";
    }
};简化后:
            
            
              java
              
              
            
          
          Supplier<String> stringSupplier = ()->{return "我的世界";};