Как установить значение внутри вложенного forEach () в java8? - PullRequest
1 голос
/ 20 мая 2019

У меня есть случай, в котором я итерирую List<DiscountClass>, и мне нужно сравнить значение списка с другим List<TypeCode>, основываясь на выполнении условия (когда Discount.code равно TypeCode.code), мне нужно установить Discount.setCodeDescr().Как этого добиться с помощью вложенного цикла forEach в Java 8?(Я не могу установить после сравнения значений в java 8 forEach).

for (Discount dis : discountList) {
    for (TypeCode code : typeCodeList) {
        if (dis.getCode().equals(code.getCode())) {
            dis.setCodeDesc(code.getCodeDesc());
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 20 мая 2019

Возможное решение с использованием jamb 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.

1 голос
/ 21 мая 2019

Другой ответ показал, как преобразовать вложенный цикл во вложенный функциональный цикл.
Но вместо того, чтобы перебирать список 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()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...