gpt4 book ai didi

Java 流 - 在一次迭代中应用两个过滤器并收集到两个集合

转载 作者:行者123 更新时间:2023-11-29 04:08:50 26 4
gpt4 key购买 nike

<分区>

我有一个 map 要迭代,我想用两个条件检查 entryset 的值;如果满足条件 1,我将其分组到一个集合中,findFirst()并得到 Optional<> ,如果不是,用另一个条件过滤并收集到另一个集合,做同样的事情。

我用 for 做了在一次迭代中循环。现在,如果我只想使用 Java 8 流迭代一次,这可能吗?

我试过 stream().filter(cond1).map(Map.Entry::getValue).findFirst() (迭代两次)。

我还检查了groupingBy()partitionBy()但我还没有看到这种可能性。


方法 1 的示例:

for (Map.Entry<String, Response> entry: responses.entrySet()) {
String key = entry.getKey();
Response value = entry.getValue();
if (key.equals("foo") && !value.equals("bar")) {
res1 = value;
} else if (key.equals("some other key")) {
res2 = value;
}
}

Response finalResponse = res1 != null ? res1 : res2;

方法 2 的示例:

Optional<Response> res1 = Optional.empty();
Response res2;

res1 = responses.entrySet().stream()
.filter(entry -> entry.getKey().equals("foo") &&
!entry.getValue().equals("bar"))
.map(Map.Entry::getValue)
.findFirst();
res2 = responses.entrySet().stream()
.filter(entry -> entry.getKey().equals("some other key"))
.map(Map.Entry::getValue)
.findFirst().orElse(null);

Response finalResponse = res1.orElse(res2);

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