我有一个可能包含括号的元素列表(在其value
属性中)。该代码在每个元素中创建一个平衡出现的列表(左括号-右括号),然后找到该余额小于或等于0的第一个索引(即所有括号都被首先封闭)。
List<Integer> parenthesisBalancePerElement = paragraphElements.stream()
.map(paragraphElement -> checkBalancedOccurences(paragraphElement, "(", ")"))
.collect(Collectors.toList());
int balance = 0;
int firstIndexWhereClosed;
for (firstIndexWhereClosed = 0; firstIndexWhereClosed < parenthesisBalancePerElement.size(); firstIndexWhereClosed++) {
int elementBalance = parenthesisBalancePerElement.get(firstIndexWhereClosed);
balance += elementBalance;
if (balance <= 0) {
break;
}
// use firstIndexWhereClosed
}
代码的第二部分使用for循环,比第一个IMO难读。有没有更清洁的方法(可能通过使用流)来做到这一点?
答案 0 :(得分:2)
当您遍历元素时,您使用检查balance
的方法使此循环成为有状态操作,不建议使用流。
您的代码仍然可以。根据您的喜好或团队的代码风格,您可以对其稍作更改:
// find the index of the last operation that brings balance below 0
int balance = 0;
int firstIndexWhereClosed = 0;
for (; balance >= 0 && firstIndexWhereClosed < parenthesisBalancePerElement.size(); firstIndexWhereClosed++) {
int elementBalance = parenthesisBalancePerElement.get(firstIndexWhereClosed);
balance += elementBalance;
}
// use firstIndexWhereClosed