我有一个例子,在这个例子中,我正在迭代List<DiscountClass>
,需要将列表值与另一个List<TypeCode>
进行比较,基于满足条件(当Discount.code
等于TypeCode.code
时),我需要设置Discount.setCodeDescr()
。如何在Java8中使用嵌套的forEach循环来实现这一点?(我无法在比较java 8 forEach中的值后进行设置)。
for (Discount dis : discountList) {
for (TypeCode code : typeCodeList) {
if (dis.getCode().equals(code.getCode())) {
dis.setCodeDesc(code.getCodeDesc());
}
}
}
发布于 2019-05-21 00:13:23
使用java 8 lambdas的可能解决方案可能如下所示:
discountList.forEach(dis -> {
typeCodeList
.stream()
.filter(code -> dis.getCode().equals(code.getCode()))
.findAny()
.ifPresent(code -> dis.setCodeDesc(code.getCodeDesc()));
});
对于每个折扣,您可以根据代码过滤TypeCodes,如果找到任何折扣,则将desc poperty设置为找到的TypeCode之一。
发布于 2019-05-21 09:05:22
另一个答案显示了如何将嵌套循环转换为嵌套函数循环。
但是,与其迭代遍历TypeCode
列表,不如使用HashMap
来获得随机访问,或者像这样的枚举:
public enum TypeCode {
CODE_1("description of code 1"),
CODE_2("description of code 2");
private String desc;
TypeCode(String desc) {
this.desc = desc;
}
public String getDesc() {
return desc;
}
}
public class Discount {
private String typeCode; //assuming you can't have the type as TypeCode
private String desc;
public Discount(String typeCode) {
this.typeCode = typeCode;
}
//getters/setters
}
然后,您的代码将更改为:
Discount d1 = new Discount("CODE_1");
Discount d2 = new Discount("CODE_2");
List<Discount> discounts = List.of(d1, d2);
discounts.forEach(discount ->
discount.setDesc(TypeCode.valueOf(discount.getTypeCode()).getDesc()));
https://stackoverflow.com/questions/56224297
复制相似问题