我有一个Map
价值观Optional
。
我想对其进行过滤以删除空值。
Map<K, Optional<T>> input;
Map<K, T> result = input.
// here is some code I'm looking for
.collect(Collector.toMap(???));
实现该目标最简单的方法是什么?
我能想到的所有要求Optional.get
和我不喜欢 IDE 对此发出警告。
我有一个Map
价值观Optional
。
我想对其进行过滤以删除空值。
Map<K, Optional<T>> input;
Map<K, T> result = input.
// here is some code I'm looking for
.collect(Collector.toMap(???));
实现该目标最简单的方法是什么?
我能想到的所有要求Optional.get
和我不喜欢 IDE 对此发出警告。
最简单的方法,特别是在避免的情况下
Optional.get()
,根本不会涉及流;更像是(一般来说,如果没有明显的方法使用流来做某事,那么根本不使用流通常会更简单、更干净。)
如果您坚持使用
Collector
,这是可能的,但需要精心定制,特别是当您不能容忍的时候Optional.get()
。如果你能忍受
Optional.get()
,你可能会认为写起来更简单一种方法是使用
Stream.mapMulti
(自 Java 16 起可用):这允许采用命令式方法。
这是一个更具功能性的方法,可以实现完全相同的功能:
上面的代码使用
Optional.ifPresent
。另一种方法是使用
Collectors.filtering
:(注意:我的 IntelliJ 产生了一个警告
Optional.get()
,但是这个警告是错误的)。