Java中Lambda表達式的使用


特別提示:本人博客部分有參考網絡其他博客,但均是本人親手編寫過並驗證通過。如發現博客有錯誤,請及時提出以免誤導其他人,謝謝!歡迎轉載,但記得標明文章出處: http://www.cnblogs.com/mao2080/

1、簡介

  Lambda表達式是Java SE 8中一個重要的新特性。lambda表達式允許你通過表達式來代替功能接口。 lambda表達式就和方法一樣,它提供了一個正常的參數列表和一個使用這些參數的主體(body,可以是一個表達式或一個代碼塊)。Lambda表達式還增強了集合庫。 Java SE 8添加了2個對集合數據進行批量操作的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了許多額外的功能。 總的來說,lambda表達式和 stream 是自Java語言添加泛型(Generics)和注解(annotation)以來最大的變化。 在本文中,我們將從簡單到復雜的示例中見認識lambda表達式和stream的強悍。

2、特點

λ表達式本質上是一個匿名方法,簡潔,難懂,難以調試,維護人員想罵娘

3、基本語法

(parameters) -> expression
或
(parameters) ->{ statements; }

4、常用方法

 
         
package com.mao.com.lambda;

import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;


public class Test {

    public static void main(String[] args) {
        List<User> list = new ArrayList<>();
        list.add(new User("1", "張三", "一年級", 95));
        list.add(new User("2", "李四", "二年級", 96));
        list.add(new User("3", "王五", "三年級", 98));
        list.add(new User("4", "朱六", "三年級", 100));

        /**遍歷*/
        list.forEach((o)->System.out.println("userId:"+o.getUserId()+", userName:"+o.getUserName()));

        /**遍歷*/
        list.forEach(o->{
            System.out.println("userId:"+o.getUserId()+", userName:"+o.getUserName());
        });

        /**轉hashSet*/
        Set<User> set1 = list.stream().collect(Collectors.toSet());

        /**轉hashSet*/
        Set<String> set2 = list.stream().map(User::getUserName).collect(Collectors.toSet());

        /**轉treeSet*/
        TreeSet<String> set3 = list.stream().map(User::getUserName).collect(Collectors.toCollection(TreeSet::new));

        /**轉map*/
        Map<String, String> map1 = list.stream().collect(Collectors.toMap(User::getUserId, User::getUserName));

        /**轉map*/
        Map<String, String> map2 = list.stream().collect(Collectors.toMap(User::getUserId, User::getUserName, (k1, k2)->k1));

        /**分組*/
        Map<String, List<User>> map3 = list.stream().collect(Collectors.groupingBy(User::getClassName));

        /**分組count*/
        Map<String, Long> map4 = list.stream().collect(Collectors.groupingBy(User::getClassName, Collectors.counting()));

        /**分組求和*/
        Map<String, Integer> map5 = list.stream().collect(Collectors.groupingBy(User::getClassName, Collectors.summingInt(User::getScore)));

        /**過濾條件*/
        List<User> temp1 = list.stream().filter(o->"1".equals(o.getUserId())).collect(Collectors.toList());

        /**多個過濾條件*/
        Predicate<User> scoFilter = (o) -> (o.getScore() > 25);
        Predicate<User> clsFilter = (o) -> ("三年級".equals(o.getClassName()));
        List<User> temp2 = list.stream().filter(scoFilter).filter(clsFilter).collect(Collectors.toList());

        /**取前多少個*/
        List<User> temp3 = list.stream().limit(2).collect(Collectors.toList());

        /**升序排序*/
        List<User> temp4 = list.stream().sorted((u1, u2)->(u1.getScore()-u2.getScore())).collect(Collectors.toList());

        /**降序排序*/
        List<User> temp5 = list.stream().sorted((u1, u2)->(u2.getScore()-u1.getScore())).collect(Collectors.toList());

        /**升序排序*/
        User user1 = list.stream().max((u1, u2)->(u1.getScore()-u2.getScore())).get();

        /**降序排序*/
        User user2 = list.stream().min((u1, u2)->(u1.getScore()-u2.getScore())).get();

        /**求和*/
        int sum = list.parallelStream().mapToInt(p -> p.getScore()).sum();

        /**匯總數據*/
        IntSummaryStatistics stats = list.stream().mapToInt((x) -> x.getScore()).summaryStatistics();

        System.out.println("最大的數字 : " + stats.getMax());
        System.out.println("最小的數字 : " + stats.getMin());
        System.out.println("所有數字的總和 : " + stats.getSum());
        System.out.println("所有數字的平均值: " + stats.getAverage());

    }

    public static Set<Integer> getIntKeys(int sta, int size){
        return Stream.iterate(sta, item -> item+1).limit(size).collect(Collectors.toSet());
    }

}

 

 1 package com.mao.com.lambda;
 2 
 3 public class User{
 4 
 5     private String userId;
 6 
 7     private String userName;
 8 
 9     private String className;
10 
11     private int score;
12 
13     public User() {
14 
15     }
16 
17     public User(String userId, String userName, String className, int score) {
18         this.userId = userId;
19         this.userName = userName;
20         this.className = className;
21         this.score = score;
22     }
23 
24     public String getUserId() {
25         return userId;
26     }
27 
28     public void setUserId(String userId) {
29         this.userId = userId;
30     }
31 
32     public String getUserName() {
33         return userName;
34     }
35 
36     public void setUserName(String userName) {
37         this.userName = userName;
38     }
39 
40     public String getClassName() {
41         return className;
42     }
43 
44     public void setClassName(String className) {
45         this.className = className;
46     }
47 
48     public int getScore() {
49         return score;
50     }
51 
52     public void setScore(int score) {
53         this.score = score;
54     }
55 }

5、參考網站

https://www.cnblogs.com/franson-2016/p/5593080.html


免責聲明!

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



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