lambda表达式已经成为了开发者必须要掌握的技能?

lambda表达式

lambda表达式是什么

引用百度百科

“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

个人理解:简化了匿名函数的一种语法。

为什么要使用lambda表达式

使用lambda表达式能大量减少开发的代码量,并且能提高效率,java从JDK1.8开发支持lambda表达式。

例:

 1         List<String> list = Arrays.asList("aa", "cc", "bb");
 2         //不用lambda: Comparator比较器类定义排序规则 排序
 3         list.sort(new Comparator<String>() {
 4             @Override
 5             public int compare(String o1, String o2) {
 6                 return o1.hashCode() - o2.hashCode();
 7             }
 8         });
 9 
10         //使用lambda(好处:缩减了大部分代码)
11         list.sort((o1, o2) -> o1.hashCode() - o2.hashCode());
12 
13         System.out.println(list);

我在工作过程中遇到的一些使用lambda表达式

注:下面的例子Person类:name和age属性

 1         //普通类型:定义了一个Person类(属性:姓名和年龄)
 2         List<Person> persons = Arrays.asList(new Person("zhangsan", 20),
 3                                              new Person("lisi", 18),
 4                                              new Person("wangwu", 50));
 5 
 6         //需求一:按照 人员的年龄进行排序
 7         persons.sort((p1, p2) -> p1.getAge() - p2.getAge());
 8         System.out.println(persons);
 9 
10      //需求二:统计出 所有人员的年龄综合,平均值,最大值,最小值
11         System.out.println("年龄总和:" + persons.stream().mapToInt(p -> p.getAge()).sum());
12         System.out.println("年龄平均值:" + persons.stream().mapToInt(p -> p.getAge()).average());
13         System.out.println("年龄最大值:" + persons.stream().mapToInt(p -> p.getAge()).max());
14         System.out.println("年龄最小值:" + persons.stream().mapToInt(p -> p.getAge()).min());
15 
16         //第一个元素
17         System.out.println("第一个:" + persons.stream().mapToInt(p -> p.getAge()).findFirst());
18 
19         //需求n...

Stream方法

map方法: 能转换集合的类型

 1         List<Person> persons = Arrays.asList(new Person("张三", 20),
 2                 new Person("李四", 18),
 3                 new Person("王五", 50));
 4 
 5         //Person类转换成Interge类型
 6         List<Integer> collect1 = persons.stream().map(p -> {
 7             return p.getAge();
 8         }).collect(Collectors.toList());
 9         System.out.println(collect1);
10 
11         //遍历集合,转换成 姓李的人员
12         List<PersonLi> collect2 = persons.stream().map(p -> {
13             PersonLi li = new PersonLi();
14             if(p.getName().indexOf("李") == 0){
15                 li.setName(p.getName());
16                 li.setAge(p.getAge());
17                 return li;
18             }
19             return null;
20         }).filter(pf -> pf != null).collect(Collectors.toList());
21         System.out.println(collect2);

filter: 过滤

 1 List<Person> persons = Arrays.asList(new Person("zhangsan", 20),
 2                 new Person("lisi", 18),
 3                 new Person("wangwu", 50));
 4 
 5         //只需年龄小于30岁的
 6         List<Person> collect = persons.stream().filter(p -> p.getAge() <= 30).collect(Collectors.toList());
 7         System.out.println(collect);
 8 
 9         Person person = persons.stream().filter(p -> p.getAge() <= 30).findAny().get();
10         System.out.println(person);

...还有redule方法,等等..(...暂时没用到),有读者用到可以分享一下自己工作中遇到的。

原文地址:https://www.cnblogs.com/liyong888/p/12081475.html