从 java 中的数组列表中删除所有可选的 empty/null 值
Remove all Optional empty/null values from arraylist in java
我需要从 List<Optional<String>>
中删除所有 empty/null 值。
示例:
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);
还有其他更好的方法吗?
removeIf
是最短的方法:
list.removeIf(x -> !x.isPresent());
使用 Java9,您可以使用新添加的 Optional::stream
API :
List<String> collect = list.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList());
This method can be used to transform a Stream
of optional elements to
a Stream
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());
对于任何想找点乐子或更好地了解 Optionals 和 Streams 工作的人 (Java 8):
List<String> collect=list.stream().
map(z->z.map(Stream::of)).
flatMap(ox->ox.orElseGet(Stream::empty)).
collect(Collectors.toList());
- 第一个映射函数将 Optional[String] 转换为 Optional
[流[字符串]]。流字符串[可选
[Stream[String]]] 就这样向前传递了
- flatmap 的 "map" 部分将每个 Optional[Stream[String]] 转换为 Stream[String]。所有空的 Optionals 都被一个空的 Stream 替换。现在我们有 Stream[Stream[String]].
- "flat" 部分将 Stream[Stream[String]] 转换为 Stream[String]。
我需要从 List<Optional<String>>
中删除所有 empty/null 值。
示例:
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);
还有其他更好的方法吗?
removeIf
是最短的方法:
list.removeIf(x -> !x.isPresent());
使用 Java9,您可以使用新添加的 Optional::stream
API :
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());
对于任何想找点乐子或更好地了解 Optionals 和 Streams 工作的人 (Java 8):
List<String> collect=list.stream().
map(z->z.map(Stream::of)).
flatMap(ox->ox.orElseGet(Stream::empty)).
collect(Collectors.toList());
- 第一个映射函数将 Optional[String] 转换为 Optional [流[字符串]]。流字符串[可选 [Stream[String]]] 就这样向前传递了
- flatmap 的 "map" 部分将每个 Optional[Stream[String]] 转换为 Stream[String]。所有空的 Optionals 都被一个空的 Stream 替换。现在我们有 Stream[Stream[String]].
- "flat" 部分将 Stream[Stream[String]] 转换为 Stream[String]。