----先来看看在python中lambda表达式:
p = lambda x:print(x)
p(10)
再来看一个简单的Java中lambda表达式:
Runnable r = () -> System.out.println("lambda");
----
貌似并没有什么差异,见的多,用的多自然就习惯了。Java中适用于lambda表达式的接口称之为函数式接口,显然Runnable是一个函数式接口:
打了注解@FunctionalInterface的就是函数式接口了,注意函数式接口只能有一个抽象方法(否则如果有多个抽象方法,lambda表达式也不知道要实现的是哪一个,毕竟lambda本身就是代替匿名类)。
----
下面分享几个常用的lambda案例,lambda虽好也不要过度使用,如果lamdba语句块过长,还是建议直接写匿名类。
1.使用lambda简化线程,使用()->{}
new Thread(new Runnable() {
@Override
public void run() {System.out.println();}
}).start();
new Thread(() -> System.out.println()).start();
2.使用lambda遍历集合
Arrays.asList("hello","java8","lamdba").forEach(System.out::println);
3.使用预判Predicate
List<Integer> ageList = Arrays.asList(28,31,20);
Predicate<Integer> gt30 = (n) -> n>30;
strList.stream().filter(gt30).forEach(System.out::println);
4.对集合进行map、reduce
List<Integer> salary = Arrays.asList(15000,18000,20000);
double total = salary.stream().map(x->1.5*x).reduce((m,n)->m+n).get();
System.out.println(total);
----
以上只是列举了几个常用的案例,遇到匿名类都可以使用lambda去改造下,而且现在的IDE都会有插件提醒功能,多去使用自然就习惯了。今天的分享就到这里,能力有限,不足之处欢迎批评指正。