拉姆达表达式groupingby后续操作

    public WorkFaceAnalysisResponse getWorkFaceAnalyse(LocalDate startDate, LocalDate endDate) {
        Integer accessWorkFaceCount = kpiConfigDao.getAccessWorkFaceCount();
        Integer recentlyAccessWorkFaceCount = kpiConfigDao.getRecentlyAccessWorkFaceCount(startDate, endDate);
        
        List<GradeData> workFaceGradeList = gradeDataDao.getWorkFaceGrade(startDate, endDate);
        Map<String, List<GradeData>> workAndListMap = workFaceGradeList.stream().collect(
            Collectors.groupingBy(GradeData::getWorkFaceCode));
      
        List<WorkFaceGradeDto> workFaceGradeDtoList = new ArrayList<>();
       
        for (Map.Entry<String, List<GradeData>> entry : workAndListMap.entrySet()) {
            WorkFaceGradeDto workFaceGradeDto = new WorkFaceGradeDto();
            workFaceGradeDto.setWorkFaceCode(entry.getKey());
            workFaceGradeDto.setWorkFaceName(entry.getValue().get(0).getWorkFaceName());
       
            BigDecimal averageGrade = new BigDecimal("0");
            for (GradeData gradeData : entry.getValue()) {
                averageGrade = averageGrade.add(gradeData.getWorkFaceGrade());
            }
            //scale表示小数点后的位数,ROUND_HALF_UP代表以四舍五入的方式进行舍取
            workFaceGradeDto.setWorkFaceGrade(averageGrade
                .divide(new BigDecimal(String.valueOf(entry.getValue().size())), 2, BigDecimal.ROUND_HALF_UP));
            workFaceGradeDtoList.add(workFaceGradeDto);
        }
      
        workFaceGradeDtoList.sort(Comparator.comparing(WorkFaceGradeDto::getWorkFaceGrade).reversed());
      
        List<WorkFaceGradeDto> unusualList = workFaceGradeDtoList.stream().filter(
            item -> item.getWorkFaceGrade().compareTo(BigDecimal.ZERO) == 0).collect(Collectors.toList());
        List<WorkFaceGradeDto> normalList = workFaceGradeDtoList.stream().filter(
            item -> item.getWorkFaceGrade().compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());

        List<GradeLevelConfig> gradeLevelConfigList = gradeLevelConfigDao.getGradeLevelConfigList();
        //切记这里List<WorkFaceGradeDto>不用赋值,因为groupingBy已经自动赋值
        Map<Integer, List<WorkFaceGradeDto>> levelAndWorkFaceCountMap = workFaceGradeDtoList.stream().collect(
            Collectors.groupingBy(item -> {
                Integer level = 100;
                for (GradeLevelConfig gradeLevelConfig : gradeLevelConfigList) {
                    int grade = item.getWorkFaceGrade().intValue();
                    if (Range.closed(gradeLevelConfig.getLevelLowerGrade(), gradeLevelConfig.getLevelHeightGrade())
                        .contains(grade)) {
                        level = gradeLevelConfig.getLevel();
                        break;
                    }
                }
                return level;
            }));

        return this.convert(accessWorkFaceCount, recentlyAccessWorkFaceCount, unusualList, normalList,
            workFaceGradeDtoList, gradeLevelConfigList, levelAndWorkFaceCountMap);
    }

BigDecimal的用法

//赋予初始值为0
BigDecimal averageGrade = new BigDecimal("0");
//将全部值相加
for (GradeData gradeData : entry.getValue()) {
      averageGrade = averageGrade.add(gradeData.getWorkFaceGrade());
  }
  //scale表示小数点后的位数,ROUND_HALF_UP代表以四舍五入的方式进行舍取
  workFaceGradeDto.setWorkFaceGrade(averageGrade
  .divide(new BigDecimal(String.valueOf(entry.getValue().size())), 2, BigDecimal.ROUND_HALF_UP));
  
//将总值比上长度,小数点后保留两位并且四舍五入
averageGrade
  .divide(new BigDecimal(String.valueOf(entry.getValue().size())), 2, BigDecimal.ROUND_HALF_UP)


猜你喜欢

转载自blog.csdn.net/taiguolaotu/article/details/113857924
今日推荐