【问题标题】:Removing values from a List<Object> that is part of a Map<String,List<Object>>从属于 Map<String,List<Object>> 的 List<Object> 中删除值
【发布时间】:2019-04-06 18:10:30
【问题描述】:

我有一个 List&lt;Coordinates&gt; coordinateList = new ArrayList&lt;Coordinates&gt;();,其中包含与值 XYname 关联的对象 (Coordinates)。

例如

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 不再出现在Map 包含的List 中?我可以通过与对象 Coordinates 关联的 toString 方法将其删除,但我需要它进行分组。

我想要实现的示例:

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

【问题讨论】:

  • 您将需要一个类来表示没有系列的坐标。你为什么关心字符串表示?
  • 只是不要打电话给toString。制作另一种方法,以您需要的方式格式化结果。
  • 如果我创建一个没有名称的类,名称是否仍会与值相关联,以便我可以将它们组合在一起?
  • 好吧,可以在Coordinates 类的toString 方法中跳过name 信息,但这感觉不对(如果你需要name 信息怎么办?打印Coordinates 实例时的其他地方?)。相反,您可以创建单独的方法,通过循环遍历每个地图条目和列表元素,以您想要的形式构建字符串(或即时打印每个部分)。
  • 或者,如果展示只是这张地图的目的,也许不是收集List&lt;Coordinates&gt;,而是收集List&lt;String&gt;(每个字符串只包含x,y信息)?

标签: java list arraylist java-8 hashmap


【解决方案1】:

由于使用Coordinates::getName 进行分组,name 属性在toString() 方法中不需要(按照惯例,您可以删除它)然后您会有你想要的输出

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

【讨论】:

    【解决方案2】:

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

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

    重写 Coordinates 类的 toString 方法并从字符串中删除“name”字段是安全的。

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

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 2018-04-26
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多