Lambda 表达式

package lambda;

/**
 * Created by ding on 2018-3-22.
 * Lambda表达式的目的就是为了简化接口式的匿名内部类,要使用Lamdba表达式前提是接口中只有一个抽象方法,这个接口被叫做函数式接口
 */
public class LamdbaDemo {
    public static void main(String[] args) {

        //lambda 表达式语法
        //好处是:1.代码简洁 2.不会产生实现类的class文件
        IEat eat = ()->{System.out.println("eat orange");};

        //lambda 表达式语句块中只有一局代码市可以省略{}
        IEat eat = ()->System.out.println("eat orange");
        eat.eat();
        eat.defaultMethod();

        //带有参数的Lambda
        IEat eat = (thing , i )->{
            System.out.println("eat.."+ thing + ".." + i + "..斤" );
        };
        eat.eat("apple" , 10);

        //带有返回值的lambda
        IEat eat = (thing , i )->{
            System.out.println("eat.."+ thing + ".." + i + "..斤" );
            return "吃完了";
        };
        //带有返回值的lambda , 并且代码块只有一行代码时,return 都可以省略
        IEat eat = (thing , i ) -> thing + " 吃完了,吃了 " + i;
        System.out.println( eat.eat("apple" , 10));

        //参数中使用final关键字,可以用简单变量接受,也可以写全,
        //这种写发有个问题接口规定的thing 变量引用不能改变。但是我在lambda里仍然可以改变引用
          IEat eat = (thing , i ) -> {
              thing = new String("22");
              return thing;
          };
        //然而这种写法确实是:thing 引用不能改变, 并且必须i 变量要写全类型。
          IEat eat2 = (final String thing , int i ) -> {
               thing = new String("22");//此处编译报错 Cannot assign a value to final variable 'thing'
              return thing;
          };
          System.out.println( eat.eat("apple" , 10));

    }

}

//只有一个抽象方法的接口
@FunctionalInterface
interface IEat{
    public String eat(final String thing , int i );

  //jdk 1.8新增的
    default void defaultMethod(){
        System.out.println("接口中的dafault方法");
    }
  //jdk 1.8新增、
    static void staticMethod(){
      System.out.println("接口中的静态方法");
    }
}


//class EatImpl implements IEat{
//    @Override
//    public void eat() {
//        System.out.println("eat apple");
//    }
//}

特别注意:

Comparator 类 虽然看上去有两个 抽象方法,但是equal 是object 的 所以不算,所以Comparator 可以使用lambda ,注意@FunctionalInterface 注解也是表明该类是函数式接口

 


原文地址:https://www.cnblogs.com/smallFishs/p/8621825.html