如何使用流从 HashSet 中过滤某些字段具有空值的对象?

我正在寻找一种方法来仅过滤给定 HashSet 中具有特定名字和空姓氏的 Worker 对象。例如,我希望代码返回带有 firstName == scott and lastName == "" 的记录。

public static void main(String[] args) {
    Worker w1 = new Worker("scott","tiger");
    Worker w2 = new Worker("panthera","tigris");
    Worker w3 = new Worker("scott","");
    Worker w4 = new Worker("alpha","romeo");
    Worker w5 = new Worker("apple","orange");
    Set<Worker> wset = new HashSet<>();
    wset.add(w1);
    wset.add(w2);
    wset.add(w3);
    wset.add(w4);
    wset.add(w5);
    System.out.println(wset.stream().filter(worker -> worker.firstName == "scott" && --something on these lines??--)); // ???
}
chlinboy 回答:如何使用流从 HashSet 中过滤某些字段具有空值的对象?

filter 是非终端操作,只有在遇到终端操作时才会处理流。 More details

因此您可以使用 collect 来显示过滤后的元素。还可以使用 equals 来比较字符串而不是 ==Refer

wset.stream()
    .filter(worker -> worker.firstName.equals("scott") 
                      && worker.lastName.isBlank()); // use isEmpty() instead of isBlank if java version is below 11.
    .collect(Collectors.toList());
}

如果您想在集合对象上调用“.stream()”之前执行“空安全”,那么您可以使用 Stream.ofNullable(自 java 9)

Stream.ofNullable(wset)
      .flatMap(Collection::stream)
      // rest of the code from above snippet
本文链接:https://www.f2er.com/50143.html

大家都在问