1

我有一个HashMap<Integer, Point3d>格式如下的列表。

 {
   {key1,(x1,y1,z1)},
   {key2,(x2,y2,z2)},
   {key3,(x1,y3,z3)},
   {key4,(x1,y4,z4)},
   {key5,(x5,y5,z5)},
   ..
 }

首先,我想从所有点中分离出第一个元素{x1,x2,x1,x1,x5},然后删除重复项,例如{x1,x2,x5}最终结果的长度意味着{x1,x2,x5}.size()

以同样的方式,我想为Points.

我尝试了分配,但无论如何我都没有找到。因为我们无法从HashMap基于index. 我们可以检索基于Key value但我不知道KeyvalueshashMap 的值。

我尝试了以下方式。

  public int xSideLength(HashMap<Integer, Point3d> coOrdinates) {
    int length=0;
    Set<Integer> keyValues=coOrdinates.keySet();
    Integer[] array=(Integer[]) keyValues.toArray();
    for (int index = 0; index < array.length; index++) {
        //logical code
    }
    return length;
}

任何人都可以建议我。

4

5 回答 5

2

您如何看待以下问题:

Set<Integer> values = new HashSet<Integer>();
for(Point3d point : coordinates.values()) {
    values.add(point.x());
}

return values.size();
于 2013-09-30T11:42:43.497 回答
0

您可以使用如下键从地图中获取元素:

Set<Integer> keyValues = coOrdinates.keySet();
for (Integer key : keyValues) {
    Point3d point = coOrdinates.get(key);   
    // Your logical code goes here.
}
于 2013-09-30T11:40:55.537 回答
0

您可以按照以下步骤,

  1. 使用您的自定义Comparator将 的值HashMap放入 Set 中。
  2. 实现您的比较方法。
  3. 返回设置的大小。

片段如下所示,

public int xSideLength(HashMap<Integer, Point3d> coOrdinates) {
    int length=0;
    Set<Point3d> values = new TreeSet<Point>(new Comparator<Point3d>() {
        @Override
        public int compare(Point3d e1, Point3d e2) {
            return e1.getX().compareTo(e2.getX());
        }
    });
    values.addAll(coOrdinates.values());
    return values.size();
}
于 2013-09-30T11:37:37.393 回答
0
public static void zz() {
    Map<String,Point3d> m = new HashMap<String,Point3d>();

    m.put("k1", new Point3d(1.0, 1.0, 4.0));
    m.put("k2", new Point3d(2.0, 2.0, 2.0));
    m.put("k3", new Point3d(1.0, 3.0, 2.0));
    m.put("k4", new Point3d(1.0, 3.0, 4.0));
    m.put("k5", new Point3d(5.0, 3.0, 2.0));

    Set xvals = new HashSet();
    Set yvals = new HashSet();
    Set zvals = new HashSet();

    double[] coords = new double[3];
    for (Point3d p : m.values()) {
        p.get(coords);
        xvals.add(coords[0]);
        yvals.add(coords[1]);
        zvals.add(coords[2]);
    }

    System.out.println("# unique x: " + xvals.size() + ": " + xvals);
    System.out.println("# unique y: " + yvals.size() + ": " + yvals);
    System.out.println("# unique z: " + zvals.size() + ": " + zvals);
    }
于 2013-09-30T12:06:38.537 回答
-1
for (Map.Entry<Integer, Point3d> entry : coOrdinates.entrySet()) {
    Point3d point = entry.getValue());
}
于 2013-09-30T11:39:29.420 回答