Java8 - обновить более одного списка на основе POJO - PullRequest
1 голос
/ 22 апреля 2020

У меня есть вариант использования, как показано ниже.

  1. POJO
  2. Если POJO не нулевое и не пустое, добавьте pojo в набор.
  3. Add один элемент из pojo в другой набор
  4. Добавьте еще один элемент из pojo в список

У меня есть что-то, как показано ниже.

Optional.ofNullable(pojo)
        .ifPresent(uniquePojoSet::add) //Added pojo to a set
        .//Add city from pojo to a set
        .//Add userName from pojo to a list 

Здесь, ifPresent возвращает void. Я не уверен, как справиться с этим? Мне нужно добавлять, только если элементы не являются нулевыми и не пустыми.

Пожалуйста, посоветуйте также написать стандартным способом.

Текущая реализация:

if(pojo != null && !pojo.isEmpty()) {
  //Add Pojo to set
  if(pojo.getProperty1() != null) {
   //Add to another set
  }
  if(pojo.getProperty2() != null) {
   //Add to another list
  }
}

Я сослал это но не смог точно соответствовать моему требованию

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

В статье, которую вы указали, предлагается преобразовать поля POJO в Optional s. Другой вариант - заставить получатели возвращать Optional с, например:

public class Pojo {

    private String city;
    private String username;

    public Optional<String> getCity() {
        return Optional.ofNullable(city);
    }

    public Optional<String> getUsername() {
        return Optional.ofNullable(username);
    }
}

И тогда вы можете использовать их следующим образом:

Optional.ofNullable(pojo).ifPresent(p -> {
    uniquePojoSet.add(p);
    p.getCity().ifPresent(cities::add);
    p.getUsername().ifPresent(usernames::add);
});
0 голосов
/ 22 апреля 2020

Поскольку Optional является классом значений и неизменным, вы можете сохранить немедленные шаги и выполнить:

Optional<Pojo> notEmpty = Optional.ofNullable(pojo).filter(pojo -> !pojo.isEmpty());
notEmpty.ifPresent(uniquePojoSet::add);
notEmpty.map(Pojo::getCity).ifPresent(citySet::add);
notEmpty.map(Pojo::getUserName).ifPresent(userNameSet::add);

Я думаю, что более читабельный способ будет простым if каскадом.

...