如何使用java流更新方法参数值

如何使用java流更新方法参数值,java,Java,我正在执行一项任务 关于这个任务,评审员要求我将表单更改为流,我如何解决这个问题 public int next(int memberIndex){ int结果=0; 对于(int i=0;i当前(索引) .next(成员索引)) .findFirst() .orelsetrow(IllegalArgumentException::new); } current()和last()方法如下所示 专用线路电流(整数索引){ 返回这个。entireLine() .get(索引); } 公共int l

我正在执行一项任务

关于这个任务,评审员要求我将表单更改为流,我如何解决这个问题

public int next(int memberIndex){
int结果=0;
对于(int i=0;i
我认为方法如下,但在本例中,
memberIndex
没有更新,因此我无法获得正确的结果值

public int next(int memberIndex){
返回IntStream.range(0,last())
.mapToObj((索引)->当前(索引)
.next(成员索引))
.findFirst()
.orelsetrow(IllegalArgumentException::new);
}
current()
last()
方法如下所示

专用线路电流(整数索引){
返回这个。entireLine()
.get(索引);
}
公共int last(){
返回这个。entireLine()
.size();
}

我们如何解决这个问题?

您要查找的是
数组列表的
流成员

在您的
上使用
this.entireLine
,我假设它是一个
列表
,您可以循环所有元素并执行逻辑,而不是使用传统的
for循环

public int next(int memberIndex) {
    int result = 0;
    this.entireLine.stream().forEach(line -> {
        memberIndex = line.next(memberIndex);
        result = memberIndex;
    });
    return result;
}
这是你想要的吗


有关
流的更多信息,请查看此项。

可能不尝试构建相同的逻辑,而是尝试实现相同的结果。该代码的作用是什么?@Thomas Logic通过循环成员数来检查结果。MemberIndex需要不断更新以比较接下来的步骤,但我不确定如何将其作为流处理。是否只提供了这些详细信息?否则,可能需要做出一些假设。@WJS是的,这只是更改源代码的问题,我们在下面的答案中得到了一个提示,我们将使用AtomicInteger
memberIdx=AtomicInteger(memberIndex);this.entireLine.forEach(line->memberIdx.set(line.next(memberIdx.get()))
我也尝试类似地处理它,但在Lambda表达式中,无法更改变量,因为只处理了最终值。如何解决此问题?为了解决此问题,我们使用
AtomicInteger
处理结果,并使其
返回结果。get()
最后,我想知道这是否是正确的方法。是的,使用Atomic是解决问题的一种方法,它肯定是可以接受的。好的,使用AtomicInteger将解决有效的最终问题。它是否可以接受取决于审阅者。