Java 如何使用“计算列表中的行数”;“字符串”;在里面?

Java 如何使用“计算列表中的行数”;“字符串”;在里面?,java,string,list,arraylist,count,Java,String,List,Arraylist,Count,我有这样一份清单: ["hi","hello","one"] ["hi","hello1","two"] ["hi1","hello3","three"] List<List<String>> strings = asList(asList("hi", "hello", "one"), asList("hi", "hello1", "two"),

我有这样一份清单:

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

除了循环外,还有没有更有效的方法来计算包含字符串“hi”的行数,从而使结果2?类似于
listCount()

的命令可以使用Java 8流:

long count = strings.stream()
                    .flatMap(List::stream)
                    .filter(Predicate.isEqual("hi"))
                    .count();
。。。假设您有一个
字符串
变量,如下所示:

["hi","hello","one"]
["hi","hello1","two"]
["hi1","hello3","three"]
List<List<String>> strings = asList(asList("hi", "hello", "one"),
                                    asList("hi", "hello1", "two"),
                                    asList("hi1", "hello3", "three"));
List strings=asList(asList(“hi”、“hello”、“one”),
asList(“你好”、“你好”、“两位”),
asList(“hi1”、“hello3”、“三”);
如果您改为使用嵌套数组,则仍然可以使用流,但必须调整上面的代码


如果您的列表很大,您可以使用
strings.parallelStream()
而不是
strings.stream()
,来启动流,以确保可用内核用于并行处理。无论您使用何种方法,它内部有循环。流java 8可以做到吗?你们能给我一个示例代码吗?流将使用多少个循环?flatMap可能会迭代一次,也会过滤。。。即使隐藏,这仍然是两个loops@AxelH:现在你只是在猜测。Streams将构建一个处理管道并遍历数据一次。对于比这个更复杂的流,它将使用诸如短路和惰性之类的优化。如果您使用并行流,它还将利用您的多核cpu…嘿,只是问问。。。我一直在到处看到Stream的解决方案,但没有解释为什么在这种情况下更好,而不仅仅是迭代。知道评论部分有答案@AxelH:这里有Java 8流的摘要:。如果你想了解更多,我也可以推荐你读这本书。谢谢,非常感谢,我刚才说的就是这样,没有任何解释。但我会看一看(即使我可以用它来做工作…)