2017-05-11 26 views

回答

6

我会在末尾添加可选的项目,如果它的存在:

ImmutableList.Builder<Item> builder = ImmutableList.<Item>builder() 
    .add(item1) 
    .add(item2); 
optionalItem.ifPresent(builder::add); 

在那之后,我会生成列表:

ImmutableList<Item> list = builder.build(); 
+0

已经这样做了,但是我想避免这个局部变量 - “builder” – Skywalker

2

假设你正在使用番石榴,这里有一个简单的一行:

List<Item> list = Stream.concat(Stream.of(item1, item2), Streams.stream(optionalItem)) 
     .collect(ImmutableList.toImmutableList()); 

注:这需要至少Java 8和番石榴21.

+0

Upvoted,尽管我更喜欢builder局部变量的方法。对于Java 9,'Optional'有一个'stream()'方法,它将返回一个元素流或空的流,所以你只需要'optionalItem.stream()'而不是Guava 21的'Streams.stream(optionalItem )' –

+1

@FedericoPeraltaSchaffner它[前面提到](http://stackoverflow.com/questions/43925445/java-add-to-list-if-value-is-not-null/43925630?noredirect=1#comment74884323_43925445) OP对“理想”的定义不是很清楚。我按照我的解释走了,但你的也没问题,国际海事组织。我认为可以肯定的是OP不使用Java 9.我也怀疑他使用的是Guava的'Optional'。我的解决方案涵盖了可能性 – shmosel

+0

根据OP的说法,我相信你的解决方案是绝对正确的,也是理想的选择。我们可以放心地假设OP还没有使用java 9 :)你是否说'Streams.stream'被重载以支持Java和Guava的'Optional'? –

相关问题