Удаление значений из списка <Object>, который является частью карты <String, List <Object>> - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть List<Coordinates> coordinateList = new ArrayList<Coordinates>();, который содержит объекты (Coordinates), связанные со значениями X, Y и name.

1008 * Е.Г. *

Coordinates [X=0.1, Y=0.1, name=Series1]
Coordinates [X=0.1, Y=0.2, name=Series1]
Coordinates [X=0.1, Y=0.3, name=Series1]
Coordinates [X=0.1, Y=0.4, name=Series2]
Coordinates [X=0.1, Y=0.5, name=Series2]

и т.д.

Я пытаюсь создать Карту всех Coordinates, сгруппированных по имени. Это делается с помощью следующей операции Java 8:

Map<String, List<Coordinates>> newList = coordinateList.stream()
           .collect(Collectors.groupingBy(Coordinates::getName));

Выход:

{Series1=[Coordinates [X=0.1, Y=0.1, name=Series1], Coordinates [X=0.1, Y=0.2, name=Series1], Coordinates [X=0.1, Y=0.3, name=Series1]], Series2=[Coordinates [X=0.1, Y=0.4, name=Series2], Coordinates [X=0.1, Y=0.5, name=Series2]]}

Есть ли способ убрать name из повторного появления внутри List, содержащегося в Map? Я мог бы удалить его с помощью метода toString, связанного с объектом Coordinates, но он мне нужен для группировки.

Пример того, чего я хочу достичь:

Series1=[Coordinates [X=0.1, Y=0.1], Coordinates [X=0.1, Y=0.2]

и т.д.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Согласно вашему коду, вы используете метод Coordinates.getName () для группировки. В этой реализации метод ToString () Coordinates не вызывается.

Map<String, List<Coordinates>> newList = coordinateList.stream()
       .collect(Collectors.groupingBy(Coordinates::getName));

Безопасно переопределить метод toString класса Coordinates и удалить поле «name» из строки.

public String toString() {
    return "Coordinates: [X=" + X + " ,Y=" + Y + "]";
}
0 голосов
/ 02 ноября 2018

Поскольку группировка выполняется с использованием Coordinates::getName, атрибут name равен , не обязателен в методе toString() (как обычно, вы можете удалить его), тогда вы будете иметь выход вы хотите

@Override
public String toString() {
    return "Coordinates [X=" + x + ", Y=" + y + "]";
}
...