gpt4 book ai didi

Java 函数式编程 : How to convert a if-else ladder inside for loop to functional style?

转载 作者:搜寻专家 更新时间:2023-10-31 08:18:41 26 4
gpt4 key购买 nike

预期是从输入列表 items 派生 3 个列表 itemIsBothaItemsbItems。如何将下面的代码转换为功能样式? (我知道这段代码在命令式风格中已经足够清晰了,但我想知道声明式风格是否真的无法处理这样一个简单的例子)。谢谢。

for (Item item: items) {
if (item.isA() && item.isB()) {
itemIsBoth.add(item);
} else if (item.isA()) {
aItems.add(item);
} else if (item.isB()){
bItems.add(item)
}
}

最佳答案

问题标题很宽泛(转换 if-else 阶梯),但由于实际问题询问的是特定场景,所以让我提供一个示例,至少可以说明可以做什么。

因为 if-else 结构根据应用于项目的谓词创建了三个不同的列表,我们可以将此行为更明确地表达为分组操作。要开箱即用,唯一需要做的额外工作是使用标记对象折叠多个 boolean 谓词。例如:

class Item {
enum Category {A, B, AB}

public Category getCategory() {
return /* ... */;
}
}

那么逻辑可以简单的表达为:

Map<Item.Category, List<Item>> categorized = 
items.stream().collect(Collectors.groupingBy(Item::getCategory));

在给定类别的情况下,可以从 map 中检索每个列表。

如果无法更改类 Item,则可以通过移动枚举声明和分类方法使 Item 类变大(该方法将变为一个静态方法)。

关于Java 函数式编程 : How to convert a if-else ladder inside for loop to functional style?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57096182/

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