Java List<T> 条件性添加 Optional<T>

7

是否有一个库(例如Apache,Guava),提供了一个带有方法的List<T>

void add(Optional<T> element)

如果元素存在,则添加该元素,(如果!element.isPresent()则不执行任何操作)。显然易于实现,但似乎这么明显的事情,可能已经有人做过了。


6
在常用库中可能没有实现方法参数的 Optional,因此似乎不鼓励使用。除此之外,直接使用 element.ifPresent(list::add) 可能更容易实现。 - ernest_k
9
list.add(optio) 可以翻译为 optio.ifPresent(list::add),意思是如果 optio 存在,则将其添加到列表 list 中。注意不要改变原来的意思。 - azro
你介意考虑一下接受一个满足你的答案吗?;) - azro
2个回答

14

你只需要使用 list.append(optio),而不是 list.add(optio)

optio.ifPresent(list::add);

示例:

Optional<Integer> optio = Optional.ofNullable(Math.random() > 0.5 ? 52 : null);
List<Integer> list = new ArrayList<>();

optio.ifPresent(list::add);
System.out.println(list);                 //50% of [52], 50% of []

5
我个人认为这比使用 CollectionUtil.add(list, optio) 更易读。+1 - Boris the Spider

2
显然易于实现,但似乎如此显而易见,以至于可能已经有人做过了。
有时候,显而易见的事情因为太简单反而被忽视。尽管如此,在Java标准库中并没有这样的功能,我也不认为会在短时间内添加,因为Optionals旨在作为方法返回类型而非方法参数使用。
另外,如果这个方法可用,那么它将需要另一个add方法重载来污染API,而像@azro提出的方法就很容易实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接