作者 | Android 大强哥
责编 | 郭芮
出品 | CSDN 博客
   
   
     
    
    
      @FunctionalInterface
    
    
      
    
    
      public interface Runnable {
    
    
      
    
    
          public abstract void run();
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      new Thread(new Runnable() {
    
    
      
    
    
          @Override
    
    
      
    public void run() 
    
    
      {
    
    
      
    
    
              System.out.println("Hello");
    
    
      
    
    
              System.out.println("Jimmy");
    
    
      
    
    
          }
    
    
      
    
    
      }).start();
    
    
      
   
   
       
       
   
     
    
    
      () -> {
    
    
      
    
    
          执行语句
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      new Thread(() -> {
    
    
      
    
    
          System.out.println("Hello");
    
    
      
    
    
          System.out.println("Jimmy");
    
    
      
    
    
      }).start();
    
    
      
   
   
       
       
   
     
    
    
      () -> 表达式
    
    
      
   
   
       
       
   
     
    
    
      new Thread(() -> System.out.println("Hello")).start();
    
    
      
   
   
       
       
   
     
    
    
      public interface OnClickListener {
    
    
      
    
    
          /**
    
    
      
     * Called when a view has been clicked.
     *
     * @param v The view that was clicked.
     */
    
    
      
    
    
          void onClick(View v);
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      view.setOnClickListener(new View.OnClickListener() {
    
    
      
    
    
          @Override
    
    
      
    
    
      
    
    
          public void onClick(View v) {
    
    
      
    
    
              v.setVisibility(View.GONE);
    
    
      
    
    
          }
    
    
      
    
    
      });
    
    
      
   
   
       
       
   
     
    
    
      ([类名 ]变量名) -> {
    
    
      
    
    
          执行语句
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      view.setOnClickListener((View v) -> {
    
    
      
    
    
          v.setVisibility(View.GONE);
    
    
      
    
    
      });
    
    
      
    
    
      view.setOnClickListener((v) -> {
    
    
      
    
    
          v.setVisibility(View.GONE);
    
    
      
    
    
      });
    
    
      
   
   
       
       
   
     
    
    
      变量名 -> {
    
    
      
    
    
          执行语句
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      view.setOnClickListener(v -> {
    
    
      
    
    
          v.setVisibility(View.GONE);
    
    
      
    
    
      });
    
    
      
   
   
       
       
   
     
    
    
      ([类名 ]变量名) -> 表达式
    
    
      
   
   
       
       
   
     
    
    
      变量名 -> 表达式
    
    
      
   
   
       
       
   
     
    
    
      view.setOnClickListener(v -> v.setVisibility(View.GONE));
    
    
      
   
   
       
       
   
     
    
    
      @FunctionalInterface
    
    
      
    
    
      public interface Comparator<T> {
    
    
      
    
    
          int compare(T o1, T o2);
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      List<Integer> list = Arrays.asList(1, 2, 3);
    
    
      
    
    
      Collections.sort(list, new Comparator<Integer>() {
    
    
      
    
    
          @Override
    
    
      
    
    
          public int compare(Integer o1, Integer o2) {
    
    
      
    
    
              return o1.compareTo(o2);
    
    
      
    
    
          }
    
    
      
    
    
      });
    
    
      
   
   
       
       
   
     
    
    
      ([类名1 ]变量名1, [类名2 ]变量名2[, ...]) -> {
    
    
      
    
    
          执行语句
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      Collections.sort(list, (Integer o1, Integer o2) -> {
    
    
      
    
    
          return o1.compareTo(o2);
    
    
      
    
    
      });
    
    
      
    
    
      Collections.sort(list, (o1, o2) -> {
    
    
      
    
    
          return o1.compareTo(o2);
    
    
      
    
    
      });
    
    
      
   
   
       
       
   
     
    
    
      ([类名1 ]变量名1, [类名2 ]变量名2[, ...]) -> 表达式
    
    
      
   
   
       
       
   
     
    
    
      Collections.sort(list, (o1, o2) -> o1.compareTo(o2));
    
    
      
   
   
       
       
   
     
    
    
      Collections.sort(list, Integer::compareTo);
    
    
      
   
   
       
    引用静态方法;
引用对象的方法;
引用类的方法;
引用构造方法。
   
   
     
    
    
      ([变量1, 变量2, ...]) -> 类名.静态方法名([变量1, 变量2, ...])
    
    
      
   
   
       
       
   
     
    
    
      类名::静态方法名
    
    
      
   
   
       
       
   
     
    
    
      public class Utils {
    
    
      
    
    
      
    
    
          public static int compare(Integer o1, Integer o2) {
    
    
      
    
    
              return o1.compareTo(o2);
    
    
      
    
    
          }
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      Collections.sort(list, (o1, o2) -> Utils.compare(o1, o2));
    
    
      
   
   
       
       
   
     
    
    
      Collections.sort(list, Utils::compare);
    
    
      
   
   
       
       
   
     
    
    
      ([变量1, 变量2, ...]) -> 对象引用.方法名([变量1, 变量2, ...])
    
    
      
   
   
       
       
   
     
    
    
      对象引用::方法名
    
    
      
   
   
       
       
   
     
    
    
      public class MyClass {
    
    
      
    
    
      
    
    
          public int compare(Integer o1, Integer o2) {
    
    
      
    
    
              return o1.compareTo(o2);
    
    
      
    
    
          }
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      MyClass myClass = new MyClass();
    
    
      
    
    
      Collections.sort(list, (o1, o2) -> myClass.compare(o1, o2));
    
    
      
   
   
       
       
   
     
    
    
      MyClass myClass = new MyClass();
    
    
      
    
    
      Collections.sort(list, myClass::compare);
    
    
      
   
   
       
       
   
     
    
    
      this::方法名
    
    
      
   
   
       
       
   
     
    
    
      private int compare(Integer o1, Integer o2) {
    
    
      
    
    
          return o1.compareTo(o2);
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      Collections.sort(list, (o1, o2) -> compare(o1, o2));
    
    
      
   
   
       
       
   
     
    
    
      Collections.sort(list, this::compare);
    
    
      
   
   
       
       
   
     
    
    
      (变量1[, 变量2, ...]) -> 变量1.实例方法([变量2, ...])
    
    
      
   
   
       
       
   
     
    
    
      变量1对应的类名::实例方法名
    
    
      
   
   
       
       
   
     
    
    
      Collections.sort(list, (o1, o2) -> o1.compareTo(o2));
    
    
      
   
   
       
       
   
     
    
    
      Collections.sort(list, Integer::compareTo);
    
    
      
   
   
       
       
   
     
    
    
      ([变量1, 变量2, ...]) -> new 类名([变量1, 变量2, ...])
    
    
      
   
   
       
       
   
     
    
    
      类名::new
    
    
      
    
    
      
   
   
       
       
   
     
    
    
      @FunctionalInterface
    
    
      
    
    
      public interface Function<T, R> {
    
    
      
    
    
          /**
    
    
      
     * Applies this function to the given argument.
     *
     * @param t the function argument
     * @return the function result
     */
    
    
      
    
    
          R apply(T t);
    
    
      
    
    
              // 省略部分代码
    
    
      
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      Function<Integer, ArrayList> function = new Function<Integer, ArrayList>() {
    
    
      
    
    
          @Override
    
    
      
    
    
          public ArrayList apply(Integer n) {
    
    
      
    
    
              return new ArrayList(n);
    
    
      
    
    
          }
    
    
      
    
    
      };
    
    
      
    
    
      List list = function.apply(10);
    
    
      
   
   
       
       
   
     
    
    
      Function<Integer, ArrayList> function = n -> new ArrayList(n);
    
    
      
   
   
       
       
   
     
    
    
      Function<Integer, ArrayList> function = ArrayList::new;
    
    
      
   
   
       
    自定义函数接口
   
   
     
    
    
      @FunctionalInterface
    
    
      
    
    
      public interface MyInterface<T> {
    
    
      
    
    
          void function(T t);
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      public class LambdaTest {
    
    
      
    
    
          public static void main(String[] args) {
    
    
      
    
    
              new Thread(new Runnable() {
    
    
      
    
    
                  @Override
    
    
      
            public void run() 
    
    
      {
    
    
      
    
    
                      System.out.println("Hello World");
    
    
      
    
    
                  }
    
    
      
    
    
              }).start();
    
    
      
    
    
          }
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      LambdaTest.class
    
    
      
    
    
      
    
    
      LambdaTest$1.class
    
    
      
    
    
      
   
   
       
       
   
     
    
    
      public static void main(java.lang.String[]);
    
    
      
    
    
        Code:
    
    
      
    
    
           0: new           #2                  // class java/lang/Thread
    
    
      
    
    
      
    
    
           3: dup
    
    
      
    
    
           4: new           #3                  // class com/example/myapplication/lambda/LambdaTest$1
    
    
      
    
    
      
    
    
           7: dup
    
    
      
    
    
           8: invokespecial #4                  // Method com/example/myapplication/lambda/LambdaTest$1."<init>":()V
    
    
      
    
    
      
    
    
          11: invokespecial #5                  // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
    
    
      
    
    
      
    
    
          14: invokevirtual #6                  // Method java/lang/Thread.start:()V
    
    
      
    
    
      
    
    
          17: return
    
    
      
   
   
       
       
   
     
    
    
      public class LambdaTest {
    
    
      
    
    
          public static void main(String[] args) {
    
    
      
    
    
              new Thread(() -> System.out.println("Hello World")).start();
    
    
      
    
    
          }
    
    
      
    
    
      }
    
    
      
   
   
       
       
   
     
    
    
      public static void main(java.lang.String[]);
    
    
      
    
    
        Code:
    
    
      
    
    
           0: new           #2                  // class java/lang/Thread
    
    
      
    
    
      
    
    
           3: dup
    
    
      
    
    
           4: invokedynamic #3,  0              // InvokeDynamic #0:run:()Ljava/lang/Runnable;
    
    
      
    
    
      
    
    
           9: invokespecial #4                  // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
    
    
      
    
    
      
    
    
          12: invokevirtual #5                  // Method java/lang/Thread.start:()V
    
    
      
    
    
      
    
    
          15: return
    
    
      
   
   
       
    可以减少代码的书写,减少匿名内部类的创建,节省内存占用。
使用时不用去记忆所使用的接口和抽象函数。
易读性较差,阅读代码的人需要熟悉 Lambda 表达式和抽象函数中参数的类型。
不方便进行调试。
热 文 推 荐
☞Python 之父退休,C 语言之父与世长辞,各大编程语言创始人现状大曝光!
☞一览群智胡健:在中国完全照搬Palantir模式,这不现实
点击阅读原文参与开发者大调查,好礼送不停!