Java 8 函数式接口

90 阅读1分钟

Java 8 函数式接口

  1. 什么是函数式接口?

    1. 如果一个接口中,只声明了一个抽象方法,则此接口称之为函数式接口
    2. 在1.8中,新增了一个注解:@FunctionalInterface,有该注解的接口都是函数式接口,如果Lambda表达式要使用,它就一定依赖于函数式接口
  2. java8 内置核心函数式接口(四个)

函数式接口参数类型返回类型作用
ConsumerTvoid对类型为T的对象应用操作,包含方法:void accept(T t);
SupplierT返回类型为T的对象,包含方法: T get();
Founction<T,R>TR处理类型为T的对象并返回结果,返回类型为R,包含方法 R apply(T t);
PredicateTboolean确定类型为T的对象是否满足约束,并返回boolean值,包含方法: boolean test(T t);
  1. 详情介绍:

    • Consumer

          @Test
          public void testConsumer(){
              //Consumer 消费型接口
              happyTime(1000.0, new Consumer<Double>() {
                  @Override
                  public void accept(Double aDouble) {
                      System.out.println("今天我去买了个表,花费:"+aDouble);
                  }
              });
      
              System.out.println("****************************************");
      
              happyTime(5000.0,money-> System.out.println("今天去了会所,花费:"+money));
      
          }
      
          private void happyTime(Double money ,Consumer<Double> consumer){
              consumer.accept(money);
          }
      
    • Predicate

      	@Test
          public void testPredicate() {
              //断言接口
              List<String> list = Arrays.asList("足球", "篮球", "乒乓球", "桌游", "羽毛球");
              List<String> filters = filterList(list, new Predicate<String>() {
                  @Override
                  public boolean test(String s) {
                      return s.contains("球");
                  };
              });
              System.out.println(filters);
              List<String> predicateList = filterList(list, key -> key.contains("球"));
              System.out.println(predicateList);
      
          }
      
          /**
           * 过滤字符串
           */
          private List<String> filterList(List<String> sourceList, Predicate<String> predicate) {
              List<String> filters = new ArrayList<>();
              for (String s : sourceList) {
                  if (predicate.test(s)) {
                      filters.add(s);
                  }
              }
              return filters;
          }
      
  2. 函数式接口都可以去 java.util.function 路径下去找,还有很多,感兴趣的可以看一下