2016-11-29 37 views
-2

我有一個這樣的名單:如何用列表中的「字符串」來統計列表中的行數?

["hi","hello","one"] 
["hi","hello1","two"] 
["hi1","hello3","three"] 

有沒有更有效的方法來計算,在它的字符串「喜」的行數,這樣的結果是除了循環?像listCount()這樣的命令?

+0

不管你用什麼方法,它內部都有循環。 – Maroun

+0

流java 8可以做到 – Jerry06

+0

你們可以給我一個示例代碼? – jaybee

回答

3

您可以使用Java 8個流:

long count = strings.stream() 
        .flatMap(List::stream) 
        .filter(Predicate.isEqual("hi")) 
        .count(); 

...假設你有一個strings變量是這樣的:

List<List<String>> strings = asList(asList("hi", "hello", "one"), 
            asList("hi", "hello1", "two"), 
            asList("hi1", "hello3", "three")); 

如果改爲嵌套陣列,你仍然可以使用流,但是你必須調整上面的代碼。

如果列表很大,你也許可以通過啓動strings.parallelStream()代替strings.stream()流,這將確保您的可用芯用於並行處理使其更快。

+0

Stream將使用多少個循環? flatMap可能會迭代一次,過濾...甚至隱藏,這仍然是兩個循環 – AxelH

+0

@AxelH:現在你只是猜測。流將構建一個處理管道並遍歷數據一次。對於比這更復雜的數據流,它將使用像短路和懶惰等優化。如果你使用並行數據流,它也會利用你的多核cpu ... –

+0

嘿,只是問...我一直在看到Stream的解決方案,沒有任何解釋,爲什麼在這種情況下更好,而不是簡單地迭代。知道評論部分有答案! – AxelH

相關問題