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 性能好點 這個是多線程處理;