gpt4 book ai didi

Java Stream groupingBy 其中键是子列表中的元素

转载 作者:行者123 更新时间:2023-11-30 10:14:59 26 4
gpt4 key购买 nike

我有一个类叫做 Food :

public class Food {
private Collection<FoodToFoodGroup> foodToFoodGroups;
//getters and setters
}

FoodToFoodGroup看起来像这样:

public class FoodToFoodGroup {
private Food food;
private FoodGroup foodGroup;
//getters and setters
}

最后,每个FoodGroup有一个名字:

public class FoodGroup {
private String name;
//getters and setters
}

这些类都是通过 hibernate 映射的实体。我收集了所有 Food数据库中的实体调用 foodRepository.findAll() ,我正在尝试将所有 Food 分组实例的名称 FoodGroup , 为了最终得到 Map<String, Collection<Food>> .我试图通过 Stream API 执行此操作,但无法想出使用 Collectors.groupingBy 执行此操作的方法。 Collection 家。

Map<String, Collection<Food>> foodsByFoodGroupName = 
foodRepository.findAll().stream()
.collect(Collectors.groupingBy(
//what goes here?
));

注意这里有一个Food可以在多个FoodGroup s,所以我需要任何 Food多个 FoodGroup 中的 s s 出现在多个 Collection结果中的 s Map . Stream API 和 Collectors.groupingBy() 是否可行? ?

示例

如果我有以下食物:

Food: Pimento Cheese
- FoodToFoodGroups: [
- FoodGroup: cheese,
- FoodGroup: dairy
]
Food: Chocolate Milk
- FoodToFoodGroups: [
- FoodGroup: milk,
- FoodGroup: dairy
]

我想要结果 Map看起来像这样:

Key: cheese
- Collection<Food>: [Pimento Cheese]
Key: milk
- Collection<Food>: [Chocolate Milk]
Key: dairy
- Collection<Food>: [Pimento Cheese, Chocolate Milk]

最佳答案

是不是你要的东西

foodRepository.findAll().stream()
.map(Food::getFoodToFoodGroup)
.flatMap(Collection::stream)
.collect(Collectors.groupingBy(
f -> f.getFoodGroup().getName(),
HashMap::new,
Collectors.mapping(FoodToFoodGroup::getFood, Collectors.toList())));

关于Java Stream groupingBy 其中键是子列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50683694/

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