Java8 преобразовать список в карту, обрабатывая дубликаты ключей и манипулируя значениями - PullRequest
1 голос
/ 25 марта 2019

У меня есть следующая структура данных

public class Zones {

   private List<Zone> zones;
}

public class Zone {

  private int id;
  private String name;
  private List<Part> parts;
}

public class Part {
  private int id;
  private String name;
}

Это моя проблема. У меня есть экземпляр Zones, скажем, z.

Я хочу транслировать z и сделать следующее: построить карту из z со следующими условиями: если ключ (на основе «идентификатора» зоны) является новым, то создайте запись на карте с ключом и зоной. Если ключ является дубликатом, тогда добавьте все «части» этой дублированной зоны в список частей существующей зоны. В конце у меня должна быть карта с "Id" зоны в качестве ключа и зоны в качестве значения.

Как я могу сделать это в Java8, используя потоки?

1 Ответ

2 голосов
/ 25 марта 2019

Вы можете использовать Collectors.toMap(), чтобы создать новый Map с идентификатором зоны в качестве ключа и Зоной в качестве значения. Если есть дубликат, возьмите List<Part> из второй зоны и добавьте его к первойодин:

  Map<Integer, Zone> map = z.getZones().stream()
                            .collect(Collectors.toMap(Zone::getId, Function.identity(), 
                             (zone1, zone2) -> {
                               zone1.getParts().addAll(zone2.getParts());
                               return zone1;
                             }));
...