Как обновить существующие объекты на основе некоторых условий в Java 8 необязательно - PullRequest
0 голосов
/ 22 января 2020
public class CustomerDto {
    private Collection<PhoneDto> phones;
    //setters
    public Optional<Collection<PhoneDto>> getPhones() {
        return Optional.ofNullable(phones);
    }
}

class PhoneDto {
    String number;
    String type;
    //setters
    public Optional<String> getN
umber() {
        return Optional.ofNullable(number);
    }
    public Optional<String> getType() {
        return Optional.ofNullable(type);
    }
}

У меня CustomerDto содержит список PhoneDto

Необходимо обновить, если тип является домашним, а номер пустым. Установить номер по умолчанию 99999999999 в customerDto

PhoneDto phoneDto = new PhoneDto();
phoneDto.setNumber("");
phoneDto.setType("home");
PhoneDto phoneDto1 = new PhoneDto();
phoneDto1.setNumber("909090000");
phoneDto1.setType("office");
Collection<PhoneDto> list = new ArrayList();
list.add(phoneDto);
list.add(phoneDto1);
CustomerDto customerDto = new CustomerDto();
customerDto.setPhones(list);
// Need to update if type is home and number is empty in customerDto
customerDto.getPhones().ifPresent(custDto -> {
    custDto.forEach(ph -> {
        if (ph.getType().equals("home") &&
        ph.getNumber().filter(String::isEmpty).isPresent()) {
            ph.setNumber("99999999999");
        }
    });
});

На выходе я не являюсь получая обновленное значение "99999999999". все еще получает старое значение.

Случай: номер пустой && тип "home" обновить номер телефона до "99999999999"

1 Ответ

3 голосов
/ 22 января 2020

Из кода, который вы разместили:

ph.getType().equals("home")

Метод getType() в классе PhoneDto возвращает Optional.
Очевидно, Optional никогда не будет равно String, будет это?
Вам нужно проверить, содержит ли Optional значение, и если оно есть, извлечь значение и сравнить , что с String home .

...