Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java流和Lambda重写嵌套for循环_Java_Java 8_Java Stream - Fatal编程技术网

使用Java流和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;

如何使用java stream和lambda在条件下重新编写下面的嵌套for循环

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
内部循环之外没有其他代码?