1. 程式人生 > 其它 >Java8中stream流的collectingAndThen方法應用例項

Java8中stream流的collectingAndThen方法應用例項

技術標籤:Java8中Stream流操作Javajavastream

1.方法定義:

此方法是在進行歸納動作結束之後,對歸納的結果進行二次處理。

2.演示:

User類準備

/**
 * @desc: 使用者實體類
 * @author: ss.xin
 * @date: 2020/12/28 12:38
 */
@Data
@AllArgsConstructor
public class User {

    //使用者Id
    int userId;

    //使用者姓名
    String userName;

    //使用者工資
    BigDecimal salary;

}

資料填充

//資料準備
User user1 = new User(1, "hangman", 100d);
User user2 = new User(1, "list", 200d);
User user3 = new User(2, "wing", 200d);
User user4 = new User(2, "zeal", 100d);
User user5 = new User(3, "tuba", 300d);
List<User> userList = new ArrayList<>()
; userList.add(user1); userList.add(user2); userList.add(user3); userList.add(user4); userList.add(user5);

1.對集合根據Id進行去重:

//對集合的結果進行去重
        List<User> list = userList.stream()
                .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.
comparing(User::getUserId))), ArrayList::new)); System.out.println(list);

在這裡插入圖片描述

2.查詢工資最高的員工的姓名:

//查詢工資最高的員工的姓名
        String userName = userList.stream()
                .collect(Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparing(User::getSalary)),(Optional<User> user) -> user.map(User::getUserName).orElse(null)));
        System.out.println(userName);

在這裡插入圖片描述

3.計算使用者工資的平均值:

//計算使用者工資的平均值
        Double avgSalary = userList.stream()
                .collect(Collectors.collectingAndThen(Collectors.averagingDouble(User::getSalary), Double::doubleValue));
        System.out.println(avgSalary);

在這裡插入圖片描述