我有这个物件清单


class ResultDto {
  private Integer field1;
  private Integer field2;
  ...etc
}


我想创建2个ResultDto对象。第一个包含List中所有field1的最大值,第二个包含List中所有field1的平均值。
对于field2同样。

List<ResultDto>                          ResultDto
resultDto1      resultDto2          =>   resultDto
field1          field1              =>   field1=max(field1, field2)
field2          field2              =>   field2=average(field1,field2)


我在ResultDto(35)中有很多字段。

做这个的最好方式是什么 ?在流或老式Java中
现在我做这样的事情:

for (GetResultDto result : resultDtoList){

        moyValues.setMeanSpeed(moyValues.getMeanSpeed() != null ? moyValues.getMeanSpeed() + result.getMeanSpeed(): result.getMeanSpeed()) ;
        if(minValues.getMeanSpeed() == null) {minValues.setMeanSpeed(result.getMeanSpeed());}
        if(result.getMeanSpeed() > minValues.getMeanSpeed()) {minValues.setMeanSpeed(result.getMeanSpeed());}
        if(maxValues.getMeanSpeed() == null) {maxValues.setMeanSpeed(result.getMeanSpeed());}
        if(result.getMeanSpeed() > maxValues.getMeanSpeed()) {maxValues.setMeanSpeed(result.getMeanSpeed());}

        moyValues.setMaxSpeed(moyValues.getMaxSpeed() != null ? moyValues.getMaxSpeed() + result.getMaxSpeed() : result.getMaxSpeed()) ;
        if(minValues.getMaxSpeed() == null) {minValues.setMaxSpeed(result.getMaxSpeed());}
        if(result.getMaxSpeed() < minValues.getMaxSpeed()) {minValues.setMaxSpeed(result.getMaxSpeed());}
        if(maxValues.getMaxSpeed() == null) {maxValues.setMaxSpeed(result.getMaxSpeed());}
        if(result.getMaxSpeed() > maxValues.getMaxSpeed()) {maxValues.setMaxSpeed(result.getMaxSpeed());}


预先感谢您的帮助

最佳答案

也许是这样的?

private static final List<ResultDto> results = new ArrayList<>(Arrays.asList(
        new ResultDto(1, 2),
        new ResultDto(3, 4)
));

public static void main(String[] args) {
    ResultDto resultDto1 = toResultDto(
            results.stream().collect(summarizingInt(dto -> dto.filed1)));
    ResultDto resultDto2 = toResultDto(
            results.stream().collect(summarizingInt(dto -> dto.filed2)));
}

private static ResultDto toResultDto(IntSummaryStatistics statistics) {
    return new ResultDto(statistics.getMax(), (int) statistics.getAverage());
}

关于java - 使用Java8流防止重复代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43654242/

10-10 19:54