Java8 - 基于POJO更新多个列表。

问题描述 投票:0回答:1

我有一个用例,如下所示。

  1. POJO
  2. 如果pojo不是null,也不是空,则将pojo添加到一个集合中。
  3. 将一个元素从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
  }
}

我参考了 这个 但不能完全符合我的要求

java java-8 optional
1个回答
0
投票

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 级联。


1
投票

你提到的文章建议将POJO字段转换为 Optionals. 另一个选择是让getter返回 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);
});
© www.soinside.com 2019 - 2024. All rights reserved.