如何增加a";“数字”;在循环中的Java 8 lambda表达式中?

如何增加a";“数字”;在循环中的Java 8 lambda表达式中?,java,Java,我有以下问题。我有一个整数位置,它从1开始,每次在xml中的特定位置发现txt中的特定人员时,它都会递增。如果我使用foreachfor(PersonMatchInfo-pmi:PersonMatchInfo)的经典迭代,它是有效的,但是我的上级让我使用Java8foreach,这种类型的迭代只对最终变量有效。如何在新的Java8循环中增加整数?多谢各位 int position = 1; personMatchInfo.forEach(pmi ->{

我有以下问题。我有一个整数位置,它从1开始,每次在xml中的特定位置发现txt中的特定人员时,它都会递增。如果我使用foreach
for(PersonMatchInfo-pmi:PersonMatchInfo)
的经典迭代,它是有效的,但是我的上级让我使用Java8
foreach
,这种类型的迭代只对最终变量有效。如何在新的Java8循环中增加整数?多谢各位

int position = 1;
personMatchInfo.forEach(pmi ->{

                    if (!stopwatch1.isStarted()) {
                        stopwatch1.start();
                    } else if (stopwatch1.isStarted()) {

                    }

                    if (pmi.getPersonName().equals(e.getValue())) {

                        positionMap.put(position, positionMap.get(position) + 1);
                        break;

                    } else {

                        position++;
                    }
                });

您可以对其使用
AtomicInteger
incrementAndGet
方法

另一个解决方案是
int[]position=newint[]{1}


递增位置[0]++

我想你的前辈要求你使用流进行收集。
然后根据您的逻辑使用collection.stream.filter.count,该逻辑将生成一个与值一样长的值并使用它。

您可以使用静态变量:

public class Poubelle {

    private static int position = 1;

    public static void setPosition (List<PersonMatchInfo> listPersonMatchInfo) {

          listPersonMatchInfo.forEach(pmi -> {
          pmi.setPosition(position++);
        });
    }
}
公共类Poubelle{
专用静态int位置=1;
公共静态无效设置位置(列表listPersonMatchInfo){
listPersonMatchInfo.forEach(pmi->{
pmi.setPosition(position++);
});
}
}
我知道已经很晚了,所以我将把它放在这里,供未来的搜索者使用。 以下是如何以一种非常简单的方式完成此任务:

使用集合的
indexOf(对象O)
属性

StringBuffer messageBody = new StringBuffer();    
List<VipObj> listOfAllVips = getResponse();
    listOfAllVipsLocal.forEach(vip -> {
                            messageBody.append("\n\t" + (listOfAllVipsLocal.indexOf(vip) + 1) + ". " + vip.getBaseUrl() + "\n");
                        });
StringBuffer messageBody=new StringBuffer();
List listOfAllVips=getResponse();
所有VipsLocal.forEach列表(vip->{
messageBody.append(“\n\t”+(listOfAllVipsLocal.indexOf(vip)+1)+”+“+vip.getBaseUrl()+”\n”);
});

告诉你的上级:“这不是一个合理的请求,它不必要地占用时间,更复杂,可读性也更低。我不知道怎么做,因为最后的废话废话废话,你能帮帮我吗!?”(这不会减少代码消耗的时间-它的性能不会比经典的foreach循环更好。)问问你的前辈他是否熟悉“过早优化”这个词。@Fildor我们可以在做的时候加上“K.I.S.S”吗?@Bilkokuya我想如果我们尝试的话,我们甚至可以找到更多。不,但这听起来像是对
过滤器
方法的完全滥用,只是巧合而已。谢谢兄弟的回答。我最初的想法和马克一样,我认为
map
filter
count
这是一个非常有效的计数案例,而不是修改全局状态计数器,尽管我再次阅读了这个问题,我认为这里不需要
count
操作,因为这是用位置构建一个映射。它与数组一起工作,但减少了运行时间不管怎样还是一样(减少运行时间是什么意思?从for_each循环切换到collection.foreach不会提高性能现在我正试图在代码中缩短运行时间。我的上级给了我“提示”使用lambda foreachs是因为它们基于java 8,而且是stuff.Thork hint。请尝试使用jvisualvm
org.apache.commons.lang3.mutable.MutableInt
对代码进行采样/分析。具有讽刺意味的是,使用静态int对我来说是有效的。我有一对嵌套的lambda函数,我需要传递内部lambda的计数由于外部lambda函数每次勾选时都需要将变量重新设置为零,所以我只是在内部lambda函数之前做了一个
position=0;
(使用您的示例)。尚未测试,但intellisense没有hissy拟合。