Предполагая, что каждый список имеет размер 2 (который, по-видимому, соответствует приведенному вами коду), все, что вам нужно сделать, чтобы преобразовать один элемент вашей карты в Point2D
, - это извлечь два элемента из списка и передайте их конструктору Point2D
:
List<Integer> chinaCoords = countryCoordinates.get("china");
Point2D chinaPoint = new Point2D(chinaCoords.get(0), chinaCoords.get(1));
Поскольку вы делаете это неоднократно, вместо того, чтобы писать этот код несколько раз, вероятно, более удобно определить вспомогательный метод для этого:
private Point2D asPoint2D(List<Integer> coordList) {
return new Point2D(coordList.get(0), coordList.get(1));
}
И тогда код в вашем методе init()
выглядит так:
events = new Point2D[] {
asPoint2D(countryCoordinates.get("china")),
...
};
Более продвинутый (но более чистый) вариант:
Если вы знакомы с API потоков и лямбда-выражения, вы даже можете сделать это без определения явной функции (или явных циклов и т. д. c):
events = countryCoordinates().values().stream()
.map(list -> new Point2D(list.get(0), list.get(1)))
.collect(Collectors.toList())
.toArray(new Point2D[countryCoordinates.size()]);