Stream常見用法:集合中某個屬性值最小的元素、集合中某個屬性值最大的元素、集合分組並統計數量、集合按指定屬性分組


記錄Stream對集合常見的幾個用法:

測試對象 Order
@Data
@AllArgsConstructor
@ToString
public class Order {

    public String userId;

    public String orderId;

    private Long createTime;

    public Long amount;
}
用法
 // 測試數據
        Order order1 = new Order("u-001", "o-800", 1650435798635L, 101L);
        Order order2 = new Order("u-001", "o-801", 1650435838644L, 102L);
        Order order3 = new Order("u-002", "o-802", 1650435871646L, 98L);
        Order order4 = new Order("u-003", "o-803", 1650435898645L, 220L);
        Order order5 = new Order("u-003", "o-804", 1650435917645L, 300L);
        List<Order> orderList = Arrays.asList(order1, order2, order3, order4, order5);


        // 1. 查詢出訂單集合中創建時間最小的元素
        Optional<Order> minCreateTimeOption = orderList.stream().min(Comparator.comparing(Order::getCreateTime));
        if (minCreateTimeOption.isPresent()) {
            Order minCreateTimeOrder = minCreateTimeOption.get();
            System.out.println(minCreateTimeOrder);
        }

        // 2. 查詢訂單集合中最大的創建時間
        OptionalLong maxCreateTime = orderList.stream().mapToLong(Order::getCreateTime).max();
        System.out.println("最大的創建時間:" + maxCreateTime);

        // 3. 統計訂單集合每個用戶的訂單數量
        Map<String, Long> groupByUserAndStatNumMap = orderList.parallelStream().collect(Collectors.groupingBy(Order::getUserId, Collectors.counting()));
        Iterator<Map.Entry<String, Long>> iterator =  groupByUserAndStatNumMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, Long> entry = iterator.next();
            System.out.println("用戶id:"+entry.getKey() + ", 訂單數:" + entry.getValue());
        }

        // 4.按用戶分組
        Map<String, List<Order>> groupByUserMap = orderList.parallelStream()
                .collect(Collectors.groupingBy(Order::getUserId));
        

       // 5. 獲取訂單集合中的所有用戶id
       List<String> userIdList = orderList.stream().map(order-> order.getUserId()).collect(Collectors.toList());

      // 6.按照訂單id收集對象本身 
      Map<String, Order> orderMap = orderList.stream().collect(Collectors.toMap(Order::getOrderId, order-> order));



  


免責聲明!

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



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