简体   繁体   English

将java for loop转换成java 8流

[英]Convert java for loop into java 8 streams

Here is the old code which uses nested for loop to get the value of price and add this value into the PriceResponse object's data list.这是使用嵌套 for 循环获取value of price并将此值添加到 PriceResponse 对象的data列表中的旧代码。

  PriceResponse priceResponse = PriceResponse.builder()
          .data(new ArrayList<>())
          .build();

  for (Row row : rows) {
      String price = "0";
      for (Param param : row.getCell()) {
          if (param.getId().equals("1")) {
              price = param.getValue();
          }
      }

      priceResponses.getData().add(DataResponse.builder()
              .result(Result.builder().values(price).build())
              .build());
  }

How to rewrite this code using java streams?如何使用 java 流重写此代码?

Maybe .streams() is not needed and rows has a method forEach .也许.streams()不需要并且rows有一个方法forEach Maybe row does not have a Collection of cells也许row没有单元格集合

rows.forEach(row -> {
        String price = row.getCells().stream()
            .filter(param -> param.getId().equals("1"))
            .map(Param::getValue)
            .findAny().orElse("0");
        priceResponses.getData().add(DataResponse.builder()
          .result(Result.builder().values(price).build())
          .build());
    });

The problem here is that using builders the code already becomes very convoluted.这里的问题是使用构建器的代码已经变得非常复杂。 I would keep having a variable price .我会一直保持可变price Here I assume that any cell with an ID "1" suffices;在这里,我假设任何 ID 为“1”的单元格就足够了; not the last one.不是最后一个。

List<DataResponse> data = rows.stream() .map(row -> row.getCell().stream() .filter(param -> "1".equals(param.getId())) .map(Param::getValue) .findAny() .orElse("0")) .map(price -> DataResponse.builder() .result(Result.builder().values(price).build()) .build()) .toList(); // or Collectors.toList() PriceResponse priceResponse = PriceResponse.builder() .data(data) .build();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM