2016-11-29 36 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

相关问题