首页 > 编程知识 正文

Lambda表达式是什么,lambda表达式怎么用

时间:2023-05-05 00:10:15 阅读:258477 作者:725

1.什么是lambda表达式

可以把lambda表达式理解为简洁的匿名函数
Lambda表达式和方法引用最主要的功能是为stream服务

2.什么情况下可以用lambda表达式

函数式接口:就是只有一个抽象方法的接口
这个很好理解lambda表达式不会显示的去实现你的抽象方法,那他怎么知道你写的方法是实现哪个呢?很简单,你只有一个抽象方法不就完了
举个例子:java.util.Comparator


它里面就是有一个compare的抽象方法,符合函数接口
注:类上面@FunctionalInterface 是专门用来修饰函数接口的标签,用了这个标签你写的接口就必须符合函数接口的规范,换句话说,用了这个标签,你就只能在接口里声明一个抽象方法,不能有多个抽像方法。

3.lambda表达式语法

(参数)->{实现体}
没错,就是这么简单,甚至()和{}有时还可以省略。

4.代码展示 4.1无参数无返回值 @Test public void test1(){ Runnable run1 = new Runnable() { @Override public void run() { System.out.println("传统方式的Runnable"); } }; Thread t1 = new Thread(run1); t1.start(); System.out.println("*****************"); /* Runnable run2 = ()->{ System.out.println("lambda实现的Runnable"); }*/ Runnable run2 = ()->System.out.println("lambda实现的Runnable"); Thread t2 = new Thread(run2); t2.start(); }

运行结果:

哈?你问为啥“*****************”在最前面 因为这是个多线程啊。
注:初学的时候可以先把传统实现方式写出来,对比着写lambda表达式
当lambda只有一行的时候。大括号可以省略。

4.2 有参数有返回值 @Test public void test2(){ //传统写法 Comparator<Integer> com1 = new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }; //换用lambda //Comparator<Integer> com2 = (o1, o2) -> {return o1.compareTo(o2);}; Comparator<Integer> com2 = (o1, o2) -> o1.compareTo(o2); System.out.println(com1.compare(1,2)); System.out.println(com2.compare(1,2)); }

运行结果

注:括号里的o1 o2 没有加Integer ,其实你加上也可以的,只是o1 o2的类型可以由 Comparator 推断出来,这里为了简洁,就不加了。
Comparator 接口是java.util下的一个函数接口

4.3有参数无返回值 @Test public void test3(){ Consumer<String> con1 = new Consumer<String>() { @Override public void accept(String o) { System.out.println(o); } }; //换用lambda //只有一个参数的时候()可以省略 //Consumer<String> con2 = (o)->System.out.println(o); Consumer<String> con2 = o->System.out.println(o); con1.accept("con1"); con2.accept("con2"); }

运行结果

4.4无参数有返回值 @Test public void test4(){ Supplier<String> sup1 = new Supplier<String>() { @Override public String get() { return "sup1"; } }; //换用lambda //Supplier<String> sup2 = ()-> {return "sup2";}; Supplier<String> sup2 = ()-> "sup2"; System.out.println(sup1.get()); System.out.println(sup2.get()); }

运行结果

5.java内置的4大核心函数式接口

消费型接口 Consumer void accept(T t)
供给型接口 Supplier T get()
函数型接口 Function<T,R> R apply(T t)
断定型接口 Predicate boolean test(T t)

6.lambda 在集合中的应用 @Test public void tset5(){ String[] strs = new String[]{"1","2","3","4","5"}; List<String> list = Arrays.asList(strs); for (String str:list) { System.out.print(str+";"); } System.out.println(); //换用lambda /*list.forEach((str)->{ System.out.print(str+";"); });*/ list.forEach(str->System.out.print(str+";")); }

运行结果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。