我有一個包含字符串和字符串列表的流,我想把所有值作爲字符串列表出來。 無論如何要做一些流操作?從流中獲取字符串列表
Stream stream = Stream.of("v1", Arrays.asList("v2, v3"));
我有一個包含字符串和字符串列表的流,我想把所有值作爲字符串列表出來。 無論如何要做一些流操作?從流中獲取字符串列表
Stream stream = Stream.of("v1", Arrays.asList("v2, v3"));
通常情況下,您不會混淆列表中的這些不同類型,但您可以從中獲得所需的結果;每個單個字符串可以轉換爲一個字符串的流,每個字符串列表可以轉換爲多個字符串的流;那麼flatMap
會將所有流平整爲一個字符串流。
List<String> strings = l.stream()
.flatMap(o -> {
if (o instanceof List) {
return ((List<String>) o).stream();
}
return Stream.of((String) o);
})
.collect(Collectors.toList());
你會得到一個unchecked cast
的警告,但這是你在不同類型的容器中混合使用的警告。
您想要在對象列表上使用流,然後根據對象的性質做一些事情。要做到這一點,你可以使用Khelwood's answer。但你很可能是更好的使用是這樣的:
List<String> l = new ArrayList<>();
l.add("v1");
l.addAll(Arrays.asList("v2","v3"));
如果你想避免「未登記」的警告,你要投的每個元素,當你執行它作爲一個後續的每件工作,其效果最好,的flatMap
步驟中,當單個String
元件和List
實例已經均勻地處理後:
List<Object> list = new ArrayList<>();
list.add("v1");
list.add(Arrays.asList("v2","v3"));
List<String> strings = list.stream()
.flatMap(o -> o instanceof List? ((List<?>)o).stream(): Stream.of(o))
.map(String.class::cast)
.collect(Collectors.toList());
但是,如已經被別人說,在第一位置不具有這種混合型列表,是更好的選擇。
這裏的流在哪裏? –
當你說流過來時,你是什麼意思?你想得到什麼? –
爲什麼不使用'l.addAll(Arrays.asList(「v2」,「v3」))',並輸入'l'作爲'List'? –
Nathan