【发布时间】:2019-07-20 02:16:25
【问题描述】:
我有一个 <String, Set<Object>> 类型的 Map,其中包含名称和坐标 (Double = X,Y)。这些值用于创建图表。我遇到的问题是某些点共享相同的坐标,因此它们几乎看不到,因为它们一个在另一个之上。为了解决这个问题,我想迭代到Set 并仅增加0.01 的X 点。
虽然这可以显着解决问题,但它并不是一个完美的解决方案,因为某些点仍然会与其他点发生冲突。
有没有办法在Map 中一次搜索特定范围的值,例如0.1-0.2, 0.2-0.3, etc. 并确定keys 出现在这些范围内吗?然后我假设我可以增加在特定范围内共享相同Xs 的那些。这将防止将0.01 添加到key 的所有Xs 中,并且只添加到需要添加的那些。
我的代码:
double i=0.01;
for (Map.Entry<String, Set<Coordinates>> serie : nameToCoordinates.entrySet()) {
List<Double> xData = new ArrayList<>();
List<Double> yData = new ArrayList<>();
for (Coordinates coord : serie.getValue()) {
xData.add(coord.getX()+i);
yData.add(coord.getY());
}
i=i+0.01;
chart.addSeries(serie.getKey(), xData, yData);
}
输入示例:
Point1 [[0.1,0.1,0.1,0.1,0.1,0.1],[0.2,0.3,0.4,0.5,0.6,0.7]]
Point2 [[0.1,0.1,0.1,0.1] ,[0.4,0.5,0.6,0.7]]
Point3 [[0.1,0.1] ,[0.6,0.7]]
【问题讨论】:
-
你可以得到
valueshttps://docs.oracle.com/javase/8/docs/api/java/util/Map.html#values--然后相互比较,如果需要,你可以通过keySet做同样的事情据我所知,没有共同的访问你问 -
我不太确定我是否理解问题,例如如果您为每个系列将
i递增0.01(假设Point1是系列键之一),为什么您的输出总是在x 数组中0.1?您将如何确定这些范围的大小?如果它们是固定的,如果一个系列中的坐标太多怎么办?您的代码也与您的描述不符:您声明地图的值是一个列表,但您的代码使用集合。 -
我也不确定我是否理解为什么增加坐标会有所帮助。如果标签重叠一个小的增量不会有太大帮助,而更大的增量会扭曲图形,不是吗?也许最好向我们展示您的问题的图片。
-
顺便说一句,我假设坐标应该包含 X 和 Y 值,那么对数据使用两个不同的数组不是一个好的选择,由于数据完整性,你应该使用一些坐标对象(包括字段为X 和 Y 值)-理论上你不能确定 X 数组中的相同位置将匹配 Y 数组中相同位置的逻辑数据..
-
@Thomas 的输出示例是在我尝试添加 0.01 之前。
标签: java dictionary set