簡體   English   中英

Java8 - 基於 POJO 更新多個列表

[英]Java8 - update more than one list based on a POJO

我有一個如下用例。

  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 我不知道如何處理這個? 僅當元素不是 null 且不為空時,我才需要添加。

請建議也以標准方式編寫。

當前實施:

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
  }
}

我提到了這個但不能完全符合我的要求

您提到的文章建議將 POJO 字段轉換為Optional 另一種選擇是讓 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);
});

由於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 cascade。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM