У меня есть класс с именем 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
.
Map<String, Collection<Food>> foodsByFoodGroupName =
foodRepository.findAll().stream()
.collect(Collectors.groupingBy(
//what goes here?
));
Обратите внимание, что Food
может быть в несколькихFoodGroup
с, поэтому мне понадобятся любые Food
с несколькими FoodGroup
с, которые будут отображаться в нескольких Collection
с в результате 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]