【发布时间】:2018-04-24 17:17:52
【问题描述】:
我希望以前没有人问过这个问题。
在 java 8 中,我有一个字符串数组myArray 输入和一个整数maxLength。
我想计算数组中小于 maxLength 的字符串数。我想使用流来解决这个问题。
为此我想这样做:
int solution = Arrays.stream(myArray).filter(s -> s.length() <= maxLength).count();
但是我不确定这是否是正确的方法。它需要遍历第一个数组一次,然后遍历过滤后的数组进行计数。
但如果我不使用流,我可以轻松地创建一个算法,在 myArray 上循环一次。
我的问题很简单:有没有办法以与循环相同的时间性能来解决这个问题?使用流总是一个“好的”解决方案吗?
【问题讨论】:
-
另外,如果你想要小于那么它应该是
s.length() < maxLength而不是s.length() <= maxLength -
@Aominè
.parallel()有帮助吗? -
你试过了吗?它有效吗?如果是这样,这在 codereview.stackexchange.com 上可能会更好。如果它不起作用,请告诉我们您遇到了什么错误或意外行为。
-
@azro 并行运行它可能会使情况变得更糟,因为在考虑并行之前需要考虑很多事情。
-
不,如果您关心性能,使用流并不总是一个好的解决方案。创建流有开销。如果你的数组很小,你最好只使用一个循环。如果您正在处理一个非常大的数组,您可能应该尝试两种解决方案,看看哪个效果更好。
标签: java java-stream