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

相關文章
相關標籤/搜索