Я пытаюсь добавить объекты из List<Farm>
в Map<Animal, List<Farm>>
public class Farm {
private String farmName;
private EnumSet<Animal> animals = EnumSet.noneOf(Animal.class);
/* ... */
}
Farm f1 = new Farm("Farm A", EnumSet.of(Animal.CAT, Animal.DOG, Animal.DUCK));
Farm f2 = new Farm("Farm B", EnumSet.of(Animal.PIG, Animal.CAT, Animal.HORSE));
Farm f3 = new Farm("Farm C", EnumSet.of(Animal.DUCK));
Задача 1: добавить объекты в List<Farm>
List<Farm> list = new ArrayList<>();
list.add(f1);
list.add(f2);
list.add(f3);
Задача 2: Добавитьобъекты из списка на карту (ключ: Animal
, значение: List <Farm>
) Я выполнил эту задачу следующим образом:
Map<Animal, List<Farm>> map = new HashMap<>();
for(Farm farm: list) {
for(Animal an: farm.getAnimals()) {
if(!map.containsKey(an)) {
List<Farm> new_list = new ArrayList<>();
new_list.add(farm);
map.put(an, new_list);
}else {
List<Farm> old_list = map.get(an);
if(!old_list.contains(farm)) {
old_list.add(farm);
}
}
}
}
Есть ли второе / более эффективное решение?Примерно так:
Map<Animal, List<Farm>> map = list.stream().collect(Collectors.groupingBy(Farm::getAnimals)));
Это не работает, потому что getAnimals
возвращает EnumSet<Animal>
.