下面是使用了2个for循环的代码。我不想使用嵌套的for循环,有没有其他替代方法?你能用替代解决方案重写代码吗?使用并行流API或任何其他解决方案来提高Java Springboot的性能,因为我必须上传大量数据,上传和释放数据需要很长时间。
for (MainTable tableElement : petmaintableObj) {
for (String keyword : PETKeylist) {
if (tableElement.getProdDesc().toLowerCase().contains(keyword)) {
System.out.println(tableElement.getProdDesc() + " contains keyword " + keyword);
MainTableRelease mtbRel = new MainTableRelease();
String unit = tableElement.getUnit();
Double quantity = tableElement.getQuantity();
mtbRel.setQuantityMts(quantity);
if (unit.equalsIgnoreCase("KGS") || unit.equalsIgnoreCase("NOS") || unit.equalsIgnoreCase("PCS")) {
Double quantity_mts= quantity/1000;
mtbRel.setQuantityMts(quantity_mts);
}
tableElement.setMainTableRelease(mtbRel);
tableElement.setReportName(State.POLYESTERPET.getValue());
tableElement.setDivision("PET");
mainTableRepo.save(tableElement);
break;
}
}
}
}
我试过了,但似乎不太对。
List<List<String>> tableElement = petmaintableObj.stream().map(list -> list.stream()
.flatMap(string -> Arrays.stream(string.split(" ")))
.collect(Collectors.toList()))
.collect(Collectors.toList());
for (String keyword : PETKeylist) {
if (tableElement.getProdDesc().toLowerCase().contains(keyword)) {
System.out.println(tableElement.getProdDesc() + " contains keyword " + keyword);
MainTableRelease mtbRel = new MainTableRelease();
String unit = tableElement.getUnit();
Double quantity = tableElement.getQuantity();
mtbRel.setQuantityMts(quantity);
if (unit.equalsIgnoreCase("KGS") || unit.equalsIgnoreCase("NOS") || unit.equalsIgnoreCase("PCS")) {
Double quantity_mts= quantity/1000;
mtbRel.setQuantityMts(quantity_mts);
}
tableElement1.setMainTableRelease(mtbRel);
tableElement1.setReportName(State.POLYESTERPET.getValue());
tableElement1.setDivision("PET");
mainTableRepo.save(tableElement1);
break;
}
}
1条答案
按热度按时间dsekswqp1#
不幸的是,我无法真正测试我编写的代码,因为其他对象的信息根本不够,但这应该可以做到:
1.您可以使用流API中的
.filter(...)
,只将与Predicate<?>
匹配的值保留在其中,而不必创建不必要的if块;这里我创建了一个由PETKeylist
元素组成的辅助流,它与prodDesc
匹配,然后返回一个布尔值。如果为true:则项目保留在流中,否则为wise:不是的。
1.第二部分,负责printing部分,和你在if块里做的差不多,它得到关键字,并把它加到语句里。
1.第三部分也可以包含在第二部分(
.peek(...)
)中,但为了可读性起见,我将它们分开了--它只是迭代所有元素,并执行您在if块中正在执行的操作。1.最后但并非最不重要的是,在最后一部分,每个项目都被保存。
我真的希望这能起作用并解决您的问题!如果某个东西没有正常工作,请随时发送反馈。
关于表演部分:实际上,情况恰恰相反--流有时候比for循环慢。