gpt4 book ai didi

Java 8 : Stream a list and map to another list based on different filters

转载 作者:行者123 更新时间:2023-12-02 07:41:16 26 4
gpt4 key购买 nike

我有以下内容代码:

public boolean foo(List<JSONObject> source, String bar, String baz) {
List<String> myList = newArrayList();

source.forEach(json -> {
if (!(json.get(bar) instanceof JSONObject)) {
myList.add(json.get(bar).toString());
} else {
myList.add(json.getJSONObject(attribute).get("key").toString());
}
});

/**
* do something with myList and baz
*/
}

我只是想知道是否有办法使用过滤器内联执行 if-else 条件。

大致如下:

List<String> myList = source.stream()
.filter(json -> !(json.get(bar) instanceof JSONObject))
.map(item -> item.get(attribute).toString())
.collect(Collectors.toList());

如果我采用上述方法,我将错过所谓的“else”条件。如何使用更java-8的方式实现我想要的?

提前致谢!

最佳答案

我看到的唯一方法是将条件放入 map 调用中。如果您使用过滤器,您会丢失“else”部分。

List<String> myList = source.stream()
.map(item -> {
if (!(item.get(bar) instanceof JSONObject)) {
return item.get(bar).toString();
} else {
return item.getJSONObject(attribute).get("key").toString();
}
})
.collect(Collectors.toList());

或者,正如 Holger 在评论中建议的那样,使用三元条件运算符:

List<String> myList = source.stream()
.map(i -> (i.get(bar) instanceof JSONObject ? i.getJSONObject(attribute).get("key") : i.get(bar)).toString())
.collect(Collectors.toList());

关于Java 8 : Stream a list and map to another list based on different filters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790893/

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