我需要从 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));
目前,我正在使用以下方法之一:
方式一:
List<String> collect = list.stream()
.filter(Optional::isPresent)
.map(obj ->obj.get())
.collect(Collectors.toList());
方式二:
List<Optional<String>> emptlist = new ArrayList<>();
emptlist.add(Optional.empty());
list.removeAll(emptlist);
还有其他更好的方法吗?
最佳答案
在 Java9 中,您可以使用新添加的 Optional::stream
执行此操作 应用程序接口(interface):
List<String> collect = list.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList());
This method can be used to transform a
Stream
of optional elements to aStream
of present value elements.
坚持使用 Java8,问题中的 Way1 已经足够好了恕我直言 -
List<String> collect = list.stream()
.filter(Optional::isPresent)
.map(Optional::get) // just a small update of using reference
.collect(Collectors.toList());
关于java - 从java中的arraylist中删除所有可选的空/空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48020703/