Java 查找满足流中该元素之前的条件的第一个元素

Java 查找满足流中该元素之前的条件的第一个元素,java,java-stream,Java,Java Stream,我有一个可能包含括号的元素列表(在它们的值属性中)。此代码在每个元素中创建一个平衡引用列表(左括号-右括号),然后查找此平衡小于或等于0的第一个索引(即所有括号都是第一个闭合的) 列表圆括号BalancePerElement=paragraphElements.stream() .map(paragraphElement->checkBalancedOccurences(paragraphElement,(“,”))) .collect(Collectors.toList()); 国际收支平衡=

我有一个可能包含括号的元素列表(在它们的
属性中)。此代码在每个元素中创建一个平衡引用列表(左括号-右括号),然后查找此平衡小于或等于0的第一个索引(即所有括号都是第一个闭合的)

列表圆括号BalancePerElement=paragraphElements.stream()
.map(paragraphElement->checkBalancedOccurences(paragraphElement,(“,”)))
.collect(Collectors.toList());
国际收支平衡=0;
int firstIndexWhereClosed;
for(firstIndexWhereClosed=0;firstIndexWhereClosed<括号BalancePerElement.size();firstIndexWhereClosed++){
int element balance=圆括号balanceperelement.get(firstIndexWhereClosed);
余额+=元素余额;

if(balance在迭代元素时使用检查
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
//查找使余额低于0的最后一个操作的索引
国际收支平衡=0;
int firstIndexWhereClosed=0;
对于(;balance>=0&&firstIndexWhereClosed<圆括号BalancePerElement.size();firstIndexWhereClosed++){
int element balance=圆括号balanceperelement.get(firstIndexWhereClosed);
余额+=元素余额;
}
//使用firstIndexWhereClosed

当您在元素上迭代时,使用检查
平衡
会使此循环成为有状态操作,这对于流是不鼓励的

您的代码现在还可以。根据您的偏好或团队的代码样式,您可以稍微更改它:

// 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
//查找使余额低于0的最后一个操作的索引
国际收支平衡=0;
int firstIndexWhereClosed=0;
对于(;balance>=0&&firstIndexWhereClosed<圆括号BalancePerElement.size();firstIndexWhereClosed++){
int element balance=圆括号balanceperelement.get(firstIndexWhereClosed);
余额+=元素余额;
}
//使用firstIndexWhereClosed

这可能是将for循环转换为返回函数的好地方(只要找到匹配项)。也可以是匿名函数。“当此平衡小于0时(即所有括号首先闭合)”-你不想要余额第一次变为0的索引吗?如果它们很平衡怎么办?在这种情况下,你永远不会有一个余额小于0,是吗?checkBalancedOccurences返回什么整数?是开始括号的索引吗?结束括号吗?其他什么?我的数据集非常不规则,非常大,因此我很瘦k在平衡出现时,我可能达到<0。这可能是一个将for循环转换为返回函数(一旦找到匹配项)的好地方。也可以是匿名函数。“当此平衡小于0时(即所有括号首先闭合的位置)”-你不想要余额第一次变为0的索引吗?如果它们很平衡怎么办?在这种情况下,你永远不会有一个余额小于0,是吗?checkBalancedOccurences返回什么整数?是开始括号的索引吗?结束括号吗?其他什么?我的数据集非常不规则,非常大,因此我很瘦k我有可能在平衡发生时达到<0。