Java早在1.8就支持lambda表达式了,虽然花时间研究学习过,可还是写的不太习惯。后来接手了一个python项目,自学了一遍python3,发现lambda确实挺友好的。

----先来看看在python中lambda表达式:

p = lambda x:print(x)
p(10)

再来看一个简单的Java中lambda表达式:

Runnable r = () -> System.out.println("lambda");

----

貌似并没有什么差异,见的多,用的多自然就习惯了。Java中适用于lambda表达式的接口称之为函数式接口,显然Runnable是一个函数式接口:

不习惯Java的lambda表达式?看了python的我习惯了_java

打了注解@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都会有插件提醒功能,多去使用自然就习惯了。今天的分享就到这里,能力有限,不足之处欢迎批评指正。