使用Java流和Lambda重写嵌套for循环
如何使用java stream和lambda在条件下重新编写下面的嵌套for循环使用Java流和Lambda重写嵌套for循环,java,java-8,java-stream,Java,Java 8,Java Stream,如何使用java stream和lambda在条件下重新编写下面的嵌套for循环 for (String taskInit : initialTaskStatus.keySet()) { for (String taskFin : finalTaskStatus.keySet()) { if (!(taskInit.equalsIgnoreCase(taskFin))) continue;
for (String taskInit : initialTaskStatus.keySet()) {
for (String taskFin : finalTaskStatus.keySet()) {
if (!(taskInit.equalsIgnoreCase(taskFin)))
continue;
else {
if (initialTaskStatus.get(taskInit).equalsIgnoreCase("COMPLETE") ||
initialTaskStatus.get(taskInit).equalsIgnoreCase("CANCELLED")) {
//Do something (1)
} else if (initialTaskStatus.get(taskInit).equalsIgnoreCase("IN_PROGRESS")) {
//Do something (2)
}
}
}
}
希望这有帮助
initialTaskStatus.keySet().forEach(taskInit -> {
finalTaskStatus.keySet().stream().filter(taskInit::equalsIgnoreCase).forEach(taskFin -> {
if (initialTaskStatus.get(taskInit).equalsIgnoreCase("COMPLETE") ||
initialTaskStatus.get(taskInit).equalsIgnoreCase("CANCELLED")) {
//Do something (1)
} else if (initialTaskStatus.get(taskInit).equalsIgnoreCase("IN_PROGRESS")) {
//Do something (2)
}
});
});
没有提供task类,因此对于本例,我假设它是一个字符串。您所要做的就是从初始映射中存在的最终映射中收集所有键(如果它们具有相同的状态)。您可以收集到一个列表,然后进行操作
Map initialTaskStatus=newhashmap();
Map finalTaskStatus=new HashMap();
列表任务=initialTaskStatus.keySet().stream()
.filter(initialTask->finalTaskStatus.keySet()
.stream().anyMatch(finalTask->finalTask.equalsIgnoreCase(initialTask)))
.collect(Collectors.toList());
List complete或cancelled=tasks.stream()
.filter(task->task.equalsIgnoreCase(“COMPELTE”)| | task.equalsIgnoreCase(“取消”)
.collect(Collectors.toList());
List inProgress=tasks.stream()
.filter(任务->任务.equalsIgnoreCase(“正在进行”)
.collect(Collectors.toList());
完成或取消.forEach(任务->系统.out.println(“完成或取消!”);
inProgress.forEach(任务->系统.out.println(“进行中”);
我认为这里可能不需要嵌套的forEach
循环,因此下面的代码片段(包括处理状态的提取方法)应该可以完成这项工作:
initialTaskStatus.entrySet().stream()
.filter(e->finalTaskStatus.containsKey(e.getKey())
.forEach(e->handleStatus(e.getValue().toUpperCase());
...
私有无效handleStatus(字符串状态){
如果(“完成”。等于(状态)| |“取消”。等于(状态)){
//做点什么(1)
}否则,如果(“进行中”。等于(状态)){
//做点什么(2)
}
}
这是我要做的事情:
List<String> status = Arrays.asList("COMPLETE", "CANCELED");
String IN_PROGRESS = "IN_PROGRESS";
initialTaskStatus.keySet().forEach(taskInit -> finalTaskStatus.keySet().forEach(taskFin ->{
if (status.contains(initialTaskStatus.get(taskInit).toUpperCase())) {
//Do something (1)
} else if (IN_PROGRESS.equals(initialTaskStatus.get(taskInit).toUpperCase())) {
//Do something (2)
}
}));
List status=Arrays.asList(“完成”、“取消”);
字符串IN_PROGRESS=“IN_PROGRESS”;
initialTaskStatus.keySet().forEach(taskInit->finalTaskStatus.keySet().forEach(taskFin->{
if(status.contains(initialTaskStatus.get(taskInit.toUpperCase())){
//做点什么(1)
}else if(IN_PROGRESS.equals(initialTaskStatus.get(taskInit.toUpperCase())){
//做点什么(2)
}
}));
为什么必须用流重写它?除了主要的问题:为什么if(!condition){continue;}else{someJob();}
而不是if(condition){someJob();}
在您的例子中,它相当于if(condition){someJob();}else{continue;}
既然除了该if
内部循环之外没有其他代码?