比较出现在两个列表中的对象的值,如果它们没有区别,则递增

时间:2019-02-20 21:20:14

标签: java list dictionary graph

我有一个Map类型的<String, List<Object>>,其中包含名称和坐标(Double = X,Y)。这些值用于创建图形。我遇到的问题是某些点共享相同的坐标,因此,它们在一个点出现在另一个点上时几乎看不见。为了解决这个问题,我想使用双循环搜索列表,并且如果X和Y都多次出现在List中,则仅将X点增加0.01。

输出示例:

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

在这种情况下,Point1(0.1,0.4)Point2(0.1,0.4)会彼此重叠。我想做的就是增加Point1(0.1+0.01,0.4),以便两者都可见。

我的代码:

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()) {


        for (Map.Entry<String, Set<Coordinates>> serie2 : nameToCoordinates.entrySet()) {
             for (Coordinates coord2 : serie.getValue()) {
                 if (!serie.getKey().equals(serie2.getKey())) {
                      if (coord.getX()==coord2.getX() && coord.getY()==coord2.getY()) {
                        xData.add(coord.getX()+i);
                        yData.add(coord.getY());
                      }
                  }
                  else {
                    xData.add(coord.getX());
                    yData.add(coord.getY());
                  }
              }

         }

     }

     i=i+0.01;

     chart.addSeries(serie.getKey(), xData, yData);

}

此技巧解决了一些问题,现在更多的可见了,但并非全部。关于如何才能更有效地执行此操作以及如何避免增加的点数出现在别人之上的任何想法?

0 个答案:

没有答案