引用百度百科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