【发布时间】:2019-04-06 18:10:30
【问题描述】:
我有一个 List<Coordinates> coordinateList = new ArrayList<Coordinates>();,其中包含与值 X、Y 和 name 关联的对象 (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<Coordinates>,而是收集List<String>(每个字符串只包含x,y信息)?
标签: java list arraylist java-8 hashmap