首页 > 解决方案 > 遍历具有重复值的 Map 并识别共享这些值的键

问题描述

我有一个包含名称和坐标()Map的类型。这些值用于创建图表。我遇到的问题是一些点共享相同的坐标,因此它们几乎不可见,因为它们一个在另一个之上。为了解决这个问题,我想迭代到并只增加点。<String, Set<Object>>Double = X,YSet0.01X

虽然这可以显着解决问题,但它并不是一个完美的解决方案,因为某些点仍然与其他点发生冲突。

有没有办法一次搜索Map特定范围的值,例如0.1-0.2, 0.2-0.3, etc.并确定keys这些范围中出现的内容?X然后我假设我可以增加在特定范围内共享相同 s 的那些。这将防止添加0.01到 a 的所有Xskey并且仅添加到需要的那些。

我的代码:

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]]

标签: javadictionaryset

解决方案


您可以创建一个看起来像这样的函数。它会返回所有在最小和最大范围之间具有 x 或 y 坐标的键。你只需要对它返回的键列表做一些事情。就像增加属于该键的值一样。当然,稍微更改函数以适应您正在使用的对象类型:p。祝你好运!

private List<String> getKeyRange(Map<String, List<Object> map, double min, double max){
    List<String> keys = new List<>();
    for(String key : map.getKeys()){
        Object coord = map.get(key);
        if( (coords.getX() > min && coords.getX() < max) || (coord.getX() > min && coord.getY() < max) ){
            keys.add(key);
        }
    }
    return keys;
}

推荐阅读