Поток на Java 8: Попълване на списък с обекти, създадени с помощта на стойности в HashMap

Така че имам HashMap от двойки ключ-стойност и бих искал да създам списък с нови обекти, създадени с помощта на всяка двойка ключ-стойност. Например:

//HashMap of coordinates with the key being x and value being y
Map<Integer, Integer> coordinates = new HashMap<Integer, Integer>();
coordinates.put(1,2);
coordinates.put(3,4);

List<Point> points = new ArrayList<Point>();

//Add points to the list of points instantiated using key-value pairs in HashMap
for(Integer i : coordinates.keySet()){
     points.add(new Point(i , coordinates.get(i)));
}

Как бих могъл да направя същото нещо, използвайки Java 8 потоци.


person iSeeJay    schedule 15.02.2017    source източник


Отговори (2)


    List<Point> points = coordinates.entrySet().stream()
            .map(e -> new Point(e.getKey(), e.getValue()))
            .collect(Collectors.toList());

Забележка: Не съм използвал forEach(points::add), защото това може да доведе до проблеми с паралелността. Като цяло трябва да внимавате за потоци със странични ефекти.

person Patrick Parker    schedule 15.02.2017
comment
Благодаря за отговора! Ясно и кратко. - person iSeeJay; 16.02.2017

Ето възможното решение:

Map<Integer, Integer> coordinates = new HashMap<Integer, Integer>();
coordinates.put(1,2);
coordinates.put(3,4);

List<Integer> list = coordinates.entrySet().stream()
        .map(entry -> entry.getValue())
        .collect(Collectors.toList());
person ioseb    schedule 15.02.2017
comment
Резултатът трябва да бъде списък с точки. - person greg-449; 15.02.2017