从Map <string,list <object >>的一部分List <object>中删除值

时间:2018-11-02 13:34:17

标签: java list arraylist java-8 hashmap

我有一个List<Coordinates> coordinateList = new ArrayList<Coordinates>();,其中包含与值CoordinatesXY相关的对象(name)。

例如

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的Map。这是通过以下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 :(得分:3)

根据您的代码,您正在使用Coordinates.getName()方法进行分组。在此实现中,不调用Coordinates的toString()方法。

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

可以安全地覆盖Coordinates类的toString方法,并从字符串中删除“名称”字段。

public String toString() {
    return "Coordinates: [X=" + X + " ,Y=" + Y + "]";
}

答案 1 :(得分:2)

由于使用Coordinates::getName进行了分组,因此name方法中的toString()属性是不需要的(按照惯例,您可以删除它),那么您将拥有想要的输出

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