[英]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.