从java中的数组列表中删除所有可选的空/空值

2022-09-03 06:05:04

我需要从中删除所有空/空值。List<Optional<String>>

例:

List<Optional<String>> list = new ArrayList<>();

list.add(Optional.empty());
list.add(Optional.of("Str1"));
list.add(Optional.of("Str2"));
list.add(Optional.of("Str3"));
list.add(Optional.of("Str4"));
list.add(Optional.of("Str5"));
list.add(Optional.empty());
list.add(Optional.ofNullable(null));

目前,我正在使用以下方法之一:

方式1:

List<String> collect = list.stream()
                   .filter(Optional::isPresent)
                   .map(obj ->obj.get())
                   .collect(Collectors.toList());

方式2:

List<Optional<String>> emptlist = new ArrayList<>();
emptlist.add(Optional.empty());
list.removeAll(emptlist);

还有其他更好的方法吗?


答案 1

使用 Java9,您可以使用新添加的 Optional::stream API 来执行此操作:

List<String> collect = list.stream()
               .flatMap(Optional::stream)
               .collect(Collectors.toList());

此方法可用于将可选元素转换为现值元素

坚持使用Java8,问题中的Way1已经足够好了恕我直言 -

List<String> collect = list.stream()
               .filter(Optional::isPresent)
               .map(Optional::get) // just a small update of using reference
               .collect(Collectors.toList());

答案 2

removeIf是执行此操作的最短方法:

list.removeIf(x -> !x.isPresent());

推荐