java8新特性之lamdba表达式

2022-07-28  本文已影响0人  糯米团子123

Lamdba表达式
使用lamdba表达式 使代码更加简洁。

  1. 表示格式
  // 语法格式
  (parametes) -> expression
  // 多行语句执行
  (parametes) -> {statements;}

  //例如:
  public int add(int x,int y){
    return x+y;
  }
  // 有以下几种写法:
  // 指定参数类型及return
  (int x,int y) ->{return x+y}

   // 指定参数类型 不指定return
  (int x,int y) ->x+y
   // 不指定参数类型和return  编译器自动判断
  (x,y) ->x+y

  // 示例:创建一个简单的线程
  Runnable runnable = () -> System.out.println("我是一个线程")
  1. 用途
    2.1 只有一个抽象方法的函数式接口
    Lamdba表达式的目标类型是函数式接口,例如
// Runnable 接口只有一个方法 run(),使用时我们就可以这样写

Runnable runnable = () ->System.out.println("test1");
new Thread(runnable).start();

// 或者更简单一点儿还可以写成
new Thread(()->System.out.print("test2")).start();
// 或者
new Thread(()->run("test3")).start()
// 或者
new Thread(()->{
  String str = "test4";
  System.out.println("test4");
}).start();

2.2 批量集合
下面两种写法是等价的:

List<String> list = Arrays.asList("a","b","c");
for(String str : list){
  System.out.println(str);
}

list.forEach((e)->  System.out.println(e));

2.3 流
下面是流查询list集合种等于“a”的数量。

list.stream().filter((e) -> "a".equals(e))).count();
  1. Lambda 表达式和匿名内部类之间的区别
    3.1 编译方式不同:java编译器编辑lamdba表达式时,会将其转换为类的私有方法,再进行动态绑定。匿名内部类编译之后,产生单独的.class字节码文件
    3.2 类型不同:lamdba只能是接口,匿名内部类可以是接口,也可以是抽象类。
    3.3 使用限制不同:如果接口中有且仅有一个抽象方法可以使用lamdba和匿名内部类,如果有多于一个的抽象方法只能使用匿名内部类。
上一篇 下一篇

猜你喜欢

热点阅读