首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在java8中如何在嵌套的forEach()中设置值?

在java8中如何在嵌套的forEach()中设置值?
EN

Stack Overflow用户
提问于 2019-05-20 23:46:52
回答 2查看 1.7K关注 0票数 2

我有一个例子,在这个例子中,我正在迭代List<DiscountClass>,需要将列表值与另一个List<TypeCode>进行比较,基于满足条件(当Discount.code等于TypeCode.code时),我需要设置Discount.setCodeDescr()。如何在Java8中使用嵌套的forEach循环来实现这一点?(我无法在比较java 8 forEach中的值后进行设置)。

代码语言:javascript
复制
for (Discount dis : discountList) {
    for (TypeCode code : typeCodeList) {
        if (dis.getCode().equals(code.getCode())) {
            dis.setCodeDesc(code.getCodeDesc());
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-21 00:13:23

使用java 8 lambdas的可能解决方案可能如下所示:

代码语言:javascript
复制
    discountList.forEach(dis -> {
        typeCodeList
          .stream()
          .filter(code -> dis.getCode().equals(code.getCode()))
          .findAny()
          .ifPresent(code -> dis.setCodeDesc(code.getCodeDesc()));
    });

对于每个折扣,您可以根据代码过滤TypeCodes,如果找到任何折扣,则将desc poperty设置为找到的TypeCode之一。

票数 4
EN

Stack Overflow用户

发布于 2019-05-21 09:05:22

另一个答案显示了如何将嵌套循环转换为嵌套函数循环。

但是,与其迭代遍历TypeCode列表,不如使用HashMap来获得随机访问,或者像这样的枚举:

代码语言:javascript
复制
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
}

然后,您的代码将更改为:

代码语言:javascript
复制
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()));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56224297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档