Lambda表達式是Java 8引入的一項強大特性,它允許以更加簡潔的方式表示匿名函數。Lambda表達式不僅讓代碼更加簡潔、清晰,而且為函數式編程提供了有力支持,從而提升了Java語言的表達能力。
本文主要講解lambda應用stream處理集合的應用。
1、基礎應用
stream流的基礎應用是對集合的過濾、對象轉換、類型轉換等。
//集合過濾后轉換存儲對象iPage.getRecords().stream()//根據狀態過濾集合.filter(item -> item.getStatus() == 2)//集合對象轉換.map(item -> {OrderVo vo = new OrderVo();BeanUtils.copyProperties(item, vo);vo.setStatusStr(OrderStatusEnum.descByCode(item.getStatus()));return vo;}).collect(Collectors.toList());//集合轉換為訂單號為key的map對象iPage.getRecords().stream().collect(Collectors.toMap(OrderPo::getOrderNo, item->item));//獲取集合訂單號集合iPage.getRecords().stream().map(item->item.getOrderNo()).collect(Collectors.toSet());
其他功能的用法如下
//獲取第一個對象OrderPo record = iPage.getRecords().stream().findFirst().get();//隨機獲取一個對象record = iPage.getRecords().stream().findAny().get();//獲取訂單金額最大的對象record = iPage.getRecords().stream().max((a,b)-> a.getOrderAmount().compareTo(b.getOrderAmount())>0? 1:-1).get();//統計數量long count = iPage.getRecords().stream().count();//排序List<OrderPo> list = iPage.getRecords().stream().sorted((a,b)-> a.getOrderAmount().compareTo(b.getOrderAmount())>0? 1:-1).collect(Collectors.toList());
2、分組統計功能
//按訂單狀態分組統計
Map<Integer, List<OrderPo>> map = iPage.getRecords().stream().collect(Collectors.groupingBy(OrderPo::getStatus));
3、reduce使用
//匯總訂單金額
BigDecimal amount = iPage.getRecords().stream().map(OrderPo::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);//
BigDecimal amount = iPage.getRecords().stream().map(OrderPo::getOrderAmount).reduce((sum, x) -> sum.add(x)).get();//匯總訂單數量
Integer q = iPage.getRecords().stream().map(OrderPo::getQuantity).reduce(0, Integer::sum);