java基础之函数式接口

一、函数式接口在Java中是指:有且仅有一个抽象方法的接口,所以函数式接口就是可以适用于Lambda使用的接口

二、自定义函数式接口

  格式:
        @FunctionalInterface //该注解可省,一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错
        public interface MyFunctionalInterface {
              void myMethod();    
        }

  例子:
        public class FunctionalInterfaceTest {
             public static void main(String[] args) {
                show(()->{
                    System.out.println("使用lambda表达式执行");
                });
        }

             public static void show(MyFunctionalInterface inner){
                      inner.method();
            }
        }

三、使用Lambda作为参数和返回值:如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用 函数式接口作为方法参数。

        例子:Lambda作为参数
              public class FunctionalInterfaceTest {
                  public static void main(String[] args) {
                      getThread1(new Runnable() {
                          @Override
                          public void run() {
                              System.out.println(Thread.currentThread().getName()+"....执行");
                          }
                      });
                      getThread2(()->{
                              System.out.println(Thread.currentThread().getName()+"....执行");
                      });
                  }
                    public static void getThread1(Runnable task){
                            new Thread(task).start();
                    }
                    public static void getThread2(Runnable task){
                            new Thread(task).start();
                    }
              }

        例子:作为返回值

              public class ComparatorTest {
                  //定义一个方法,方法的返回值类型使用函数式接口Comparator
                  public static Comparator<Integer> getComparator(){
              /*
                        return new Comparator<Integer>() {
                             @Override
                            public int compare(Integer o1, Integer o2) {
                              //降序
                              return o2 - o1;
                           }
                        };
              */
                       //使用lambda简写
                       return((o1, o2)-> o2 - o1);
                  };
                  public static void main(String[] args) {
                      Integer[] arr = {1,3,9,2,7,8};
                      System.out.println("....排序前...."+Arrays.toString(arr));
                      Arrays.sort(arr,getComparator());
                      System.out.println("....排序后...."+Arrays.toString(arr));
                  }
          }

四、简单明了例子

        public class MyInterfacesTest {
            public static void main(String[] args) {
          /* getMethod(new MyInterfaces<String>() {
              @Override
              public int method(String s) {
                  return s.length();
              }
            });
        */
             //简写方式
           getMethod(s -> s.length()); //处理
        }

      public static void getMethod(MyInterfaces<String> myInterfaces){
          int len = myInterfaces.method("HelloWorld"); //传参
          System.out.println("该字符串的长度为:"+len);
       }
   }
posted @ 2020-08-14 00:39  jock_javaEE  阅读(193)  评论(0编辑  收藏  举报