2017-05-11 43 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'? –

相關問題