gpt4 book ai didi

java - 嵌套 For 循环转换为 Lambda 和 Map 比较

转载 作者:行者123 更新时间:2023-12-02 16:15:47 25 4
gpt4 key购买 nike

我正在努力将现有的 forloop 转换为 lambda 表达式。我有一个对象列表( List<Task> ),其中包含一个名为“InputData”的 map ( Map<String, String> )。我还有另一个Map<String, String> (验收)。

我想过滤任务对象列表,其中 Task.InputData 映射包含所有“接受”映射条目。 Task.InputData 可能包含其他条目,但我想强制 Acceptance 中存在的变量必须存在于 Task.InputData 中。

现有的 for 循环如下所示:

boolean addTask;
List<Task> finalResults = new ArrayList<>();
for (Task t : results) {
addTask = true;
for (Entry<String, String> k : kvVars.entrySet()) {
if (!t.getInputData().containsKey(k) || !t.getInputData().get(k).equals(k.getValue())) {
addTask = false;
}
}

if (addTask) {
finalResults.add(t);
}
}

我对一种方法有点困惑,我是否应该尝试结合平面 map 和过滤条件,或者是否应该遵循现有 for 循环中的逻辑。

最佳答案

您可以使用过滤器来收集所有在InputData中具有所有“Acceptance”k/v的Task

List<Task> finalResults = results.stream()
.filter(t->kvVars.entrySet()
.stream()
.allMatch(k->t.getInputData().containsKey(k.getKey())
&& t.getInputData().get(k.getKey()).equals(k.getValue()))
.collect(Collectors.toList());

关于java - 嵌套 For 循环转换为 Lambda 和 Map 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58772674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com