【发布时间】:2019-05-23 21:44:05
【问题描述】:
是否可以仅使用 java 8 流重写像这样的复杂 for 循环?我想出的任何东西似乎都比较臃肿,然后只保留下面的代码并使用正常的 for 循环。
public static boolean isBalanced(String text) {
int count = 0;
for(int i = 0; i < text.length(); i++ ) {
if (text.charAt(i) == ')') {
count--;
} else if (text.charAt(i) == '(') {
count++;
}
if (count < 0) {
return false;
}
}
return count == 0;
}
使用流
public static boolean isBalanced2(String text) {
AtomicInteger count = new AtomicInteger(0);
text.chars()
.forEachOrdered(x -> {
if (x == ')') {
count.getAndDecrement();
} else if (x == '(') {
count.getAndIncrement();
}
});
return count.get() == 0;
}
它工作正常,但它会遍历整个字符串,有时这可能会浪费计算,例如在字符串“)......”的情况下
似乎不可能在 count
谢谢
【问题讨论】:
-
我会使用
for (char c : test.toCharArray()) {(或等效的代码点)。 -
你可以给人们时间来回应......
-
public static boolean isBalanced2(String text) { AtomicInteger count = new AtomicInteger(0);文本.chars()。 forEachOrdered(x -> { if (x == ')') { count.getAndDecrement(); } else if (x == '(') { count.getAndIncrement(); } });返回计数.get() == 0;它工作得很好,只是它遍历整个字符串,有时它可能会浪费计算,例如在字符串“)......”的情况下
-
我建议也解释一下用例,我的意思是你到底需要什么?你为什么要返回
if (count < 0)和return count == 0;更好地解释你想要什么@Pat -
这篇文章中的
Stream方法对于String像)(这样的String是否失败?早期的回报不仅仅是性能调优,本质上是算法。大括号的顺序很重要。
标签: java for-loop java-8 java-stream