Lambda表達式使用整理總結

Lambda 表達式的基礎語法 : Java8 中引入了一個新的操作符 “->“, 該操作符稱爲箭頭操作符或 Lambda 操作符,箭頭操作符將 Lambda 表達式拆分成兩部分 :

左側 : Lambda 表達式的參數列表;

右側 : Lambda 表達式中所需執行的功能, 即 Lambda 體;

基本語法:

(parameters) -> expression

(parameters) -> { statements; }

常用示例:

1.forEach遍歷List集合

String[] names = {"喵","汪","咩"};  
List<String> nameList =  Arrays.asList(names);  

// 舊的循環方式  
for (String name : nameList) {  
     System.out.print(name + "; ");  
}  

// 使用 lambda 表達式
nameList.forEach((item) -> System.out.print(item + " ")); 

2.Stream用法

(1).filter過濾

List<User> users = users.stream()
                .filter(user -> "小喵咪".equals(user.getName()))
                .collect(Collectors.toList());

(2).map處理

List nums = Arrays.asList(100, 200, 300, 400, 500);
for (Integer num : nums) {
      num = num + 12;
      System.out.println(num);
}
// 使用 lambda 表達式
List nums = Arrays.asList(100, 200, 300, 400, 500);
nums.stream().map((num) -> num = num + 12)
                      .forEach(System.out::println);

3.使用Lambda排序集合

String[] names = {"喵","汪","咩"};   

// 使用匿名內部類排序
Arrays.sort(names, new Comparator<String>() {  
    @Override  
    public int compare(String s1, String s2) {  
        return (s1.compareTo(s2));  
    }  
});
// 使用lambda表達式
Arrays.sort(names, (String s1, String s2) -> (s1.compareTo(s2))); 

4.返回不同類型的處理結果

//返回String
String str = userList.stream()
        .filter(user -> "喵".equals(user.getName()))
        .collect(joining(";"));    

//返回Set
Set<String> names = userList.stream()  
          .filter(user -> "喵".equals(user.getName()))
          .collect(toSet());

//返回TreeSet
TreeSet<String> names = userList.stream()  
          .filter(user -> "喵".equals(user.getName()))
          .collect(toCollection(TreeSet::new));  

5.實現多線程接口

//使用Thread匿名內部類  
new Thread(new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("Hello world!");  
    }  
}).start();  

//使用lambda表達式
new Thread(() -> System.out.println("Hello world!")).start();  



//使用Runnable匿名內部類  
Runnable race1 = new Runnable() {  
    @Override  
    public void run() {  
        System.out.println("Hello world!");  
    }  
};  

//使用lambda表達式
Runnable race2 = () -> System.out.println("Hello world!");

注意事項:

1.lambda 表達式的局部變量可以不用聲明爲 final,但是必須不可被後面的代碼修改(即隱性的具有 final 的語義);

2.在 Lambda 表達式當中不允許聲明一個與局部變量同名的參數或者局部變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章