如何增加a";“数字”;在循环中的Java 8 lambda表达式中?
我有以下问题。我有一个整数位置,它从1开始,每次在xml中的特定位置发现txt中的特定人员时,它都会递增。如果我使用foreach如何增加a";“数字”;在循环中的Java 8 lambda表达式中?,java,Java,我有以下问题。我有一个整数位置,它从1开始,每次在xml中的特定位置发现txt中的特定人员时,它都会递增。如果我使用foreachfor(PersonMatchInfo-pmi:PersonMatchInfo)的经典迭代,它是有效的,但是我的上级让我使用Java8foreach,这种类型的迭代只对最终变量有效。如何在新的Java8循环中增加整数?多谢各位 int position = 1; personMatchInfo.forEach(pmi ->{
for(PersonMatchInfo-pmi:PersonMatchInfo)
的经典迭代,它是有效的,但是我的上级让我使用Java8foreach
,这种类型的迭代只对最终变量有效。如何在新的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。请尝试使用jvisualvmorg.apache.commons.lang3.mutable.MutableInt
对代码进行采样/分析。具有讽刺意味的是,使用静态int对我来说是有效的。我有一对嵌套的lambda函数,我需要传递内部lambda的计数由于外部lambda函数每次勾选时都需要将变量重新设置为零,所以我只是在内部lambda函数之前做了一个position=0;
(使用您的示例)。尚未测试,但intellisense没有hissy拟合。