Lambda表達式看這篇基本就夠用了


     本文訊】 2020.05.08  polo  寫博不易,尊重知識!

 

     Lambda  是java8 引入的一個新特性,閉包,又叫函數式接口,下面介紹下,常用的lambda表達式方式:

     所謂的將函數作為一個參數傳給方法,這是Lambda的一個特性;

     以下是lambda表達式的重要特征:

  • 可選類型聲明:不需要聲明參數類型,編譯器可以統一識別參數值。(解釋:就是不必要再lambda中聲明這個變量具體是什么數據類型
  • 可選的參數圓括號:一個參數無需定義圓括號,但多個參數需要定義圓括號。
  • 可選的大括號:如果主體包含了一個語句,就不需要使用大括號。
  • 可選的返回關鍵字:如果主體只有一個表達式返回值則編譯器會自動返回值,大括號需要指定明表達式返回了一個數值。

     初見:

 1.x -> 2 * x 這就是一個參數,一個表達式,也沒有聲明數據類型,就是說這個時候啊,你可以把圓括號省略,后面運算表達式也可以不用大括號括起來;
 2.(x, y) -> x  y 哎呀,兩個參數,那就得用括號括起來了,一個表達式,好吧,你可以不寫了;
 3.(int x,int y)-> x-y 當然你也可以聲明,你聲明了,也沒有人能夠咋滴你!  

這就是它的基本格式;

1.lambda表達式之分組:
  List<String> list = new ArrayList<String>();
  list.add("one");
  list.add("two");
  list.add("three");
  list.add("four");
  list.add("five");

    Map<Integer,List<String>> ml =  list.stream().collect(Collectors.groupingBy(x->x.length()));//按照list中字符長度進行分組

    System.out.println(ml);
在控制台打印的結果如下:
{3=[one, two], 4=[four, five], 5=[three]} 看到了嗎,字符長度為3的有 one,two;字符長度為4的有four,five。。。。
利用這個特性我們是不是,可以利用這點進行對list,進行分組了;
 
        
2.lambda表達式之list遍歷:
 
        
  List<String> list = new ArrayList<String>();
  list.add("one");
  list.add("two");
  list.add("three");
  list.add("four");
  list.add("five");
    list.forEach(x->{
System.out.println(x);
});
   打印結果:

    one
    two
    three
    four
    five

看懂了嗎,這就是打印list里面每個數據,x如果是對象,不就可以對這個對象x進行操作了,但要注意的是表達式里面的變量,只能是final的,不可改變的;


3.lambda表達式之filter條件過濾
  List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");

list.stream().filter(x->
x.length()==3 //條件
).forEach(t->{
System.out.println(t);
});
  看到了嗎,filter的作用就是條件過濾,還可以連寫哦;


4.lambda表達式之map轉換
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");



List<Integer> lengths = list.stream().filter(x -> x.length()==3).map(y->y.length())
.collect(Collectors.toList());
System.out.println(lengths);

控制台打印:
[3, 3]
這就是說,利用map可以返回一個新的list,如果是對象,你可以取出對象中某個屬性,然后重組一個新的list;


5.lambda表達式之allMatch、anyMatch、noneMatch

  allMatchStream中全部元素符合傳入的predicate返回 true

  anyMatchStream中只要有一個元素符合傳入的predicate返回 true

  noneMatchStream中沒有一個元素符合傳入的predicate返回 true

  List<String> list = new ArrayList<String>();
  list.add("one");
  list.add("two");
  list.add("three");
  list.add("four");
  list.add("five");



  Boolean bl = list.stream().anyMatch(x->x.length()==4);
  System.out.println(bl);
 打印true


待續。。。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM