學習java8 流處理總結-根據條件篩選出新的集合


1.很多情況我們需要在一個集合中篩選符合條件的形成一個新的數組

一般情況可能就是使用一個for循環加if判斷比如這樣:

 List<DetailDataDto> detailDataDtos = basicInfoService.listDetailDataByDate(date, deptNo, t1);
//篩選這個集合日期不為空,  getManpower 不為0,NaN,INFINITY
//普通的可能首先創建一個新的集合為了接收復合條件的元素
 List<DetailDataDto> detailDataDtoStream  =new ArrayList<>();
for(DetailDataDto detailDataDto:detailDataDtos){
    
if(!detailDataDto.getManpower().equals(Double.NaN)||detailDataDto.getManpower().equals(Double.POSITIVE_INFINITY)||ObjectUtils.isNotEmpty(detailDataDto.getManpower())||ObjectUtils.isNotEmpty(detailDataDto.getDeployTime())){
detailDataDtoStream.add(detailDataDto);
}
}
//最后篩選出來才是自己想要的
 

 而看過流的操作可以使用以下形式來實現 不僅代碼美觀而且性能提高也不少

  List<DetailDataDto> detailDataDtos = basicInfoService.listDetailDataByDate(date, deptNo, t1);
     
        List<DetailDataDto> detailDataDtoStream =
                detailDataDtos.parallelStream().filter(s -> !s.getManpower().equals(Double.NaN))
                        .filter(s -> !s.getManpower().equals(Double.POSITIVE_INFINITY))
                        .filter(s -> s.getManpower() != 0).filter(s -> ObjectUtils.isNotEmpty(s.getManpower()))
                        .filter(s -> ObjectUtils.isNotEmpty(s.getDeployTime())).collect(Collectors.toList());

 

ps:parallelStream() 比stream 性能好點 這個是多線程處理;


免責聲明!

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



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