如何使用流从 HashSet 中过滤某些字段具有空值的对象?
How to use stream to filter objects from HashSet that have empty value for certain fields?
我正在寻找一种方法来仅过滤给定 HashSet
中具有特定名字和空姓氏的 Worker 对象。例如,我希望代码 return 带有 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??--)); // ???
}
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
(因为java9)
Stream.ofNullable(wset)
.flatMap(Collection::stream)
// rest of the code from above snippet
我正在寻找一种方法来仅过滤给定 HashSet
中具有特定名字和空姓氏的 Worker 对象。例如,我希望代码 return 带有 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??--)); // ???
}
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
(因为java9)
Stream.ofNullable(wset)
.flatMap(Collection::stream)
// rest of the code from above snippet