引用百度百科java
“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式能够表示闭包(注意和数学传统意义上的不一样)。express
我的理解:简化了匿名函数的一种语法。闭包
使用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);
注:下面的例子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...
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);
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