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

lambda表达式

lambda表达式是什么

引用百度百科java

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

我的理解:简化了匿名函数的一种语法。闭包

为何要使用lambda表达式

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

例:函数

 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属性spa

 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方法,等等..(...暂时没用到),有读者用到能够分享一下本身工做中遇到的。code

相关文章
相关标签/搜索