猿问

删除彼此相邻的重复项

我有一个清单: private static List<Point> pointList = new ArrayList<>();。


Point = 表示 3D 图形中一个点的对象。


我可以将积分与方法进行比较:


@Override

public boolean equals(Object o) {

    if (this == o)

        return true;

    if (o == null || getClass() != o.getClass())

        return false;

    Point point = (Point) o;

    return Arrays.equals(position, point.position);

}

假设我的列表如下所示: { a1, a2, b1, a3, c1, c2, a4 }


所有对象都是不同的对象(a1 =/= a2..),但具有相同的值(a1、a2... 表示图上完全相同的点)


我想要的是删除Points列表中彼此相邻的重复项,因此列表看起来像 { a, b, a, c, a }


我试过:


public List<Point> getUniq() {

    List<Point> l = new ArrayList<>();

    for (int i = 0; i < pointList.size()-1; i++) {

        if (pointList.get(i).equals(pointList.get(i + 1))) {

            l.add(pointList.get(i));

        }

    }

    return l;

}

但我缺少元素。


明月笑刀无情
浏览 158回答 2
2回答

元芳怎么了

您基本上需要保留对最后添加的对象的引用。如果您当前尝试添加的对象是相同的,那么您应该跳过它。以下是使用您的代码的样子:public List<Point> getUniq() {&nbsp; &nbsp; List<Point> result = new ArrayList<>();&nbsp; &nbsp; Point lastAdded = null;&nbsp; &nbsp; for (int i = 0; i < pointList.size(); i++) {&nbsp; &nbsp; &nbsp; &nbsp; if (!points.get(i).equals(lastAdded)) { // previously added point was different&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastAdded = points.get(i); // update previously added&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.add(lastAdded); // add to result&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return result;}

慕莱坞森

根据您的描述,您的代码似乎没有做您想做的事情。我想要的是删除列表中彼此相邻的重复点,因此列表看起来像 { a, b, a, c, a }以下代码应该可以完成工作:public List<Point> getUniq() {&nbsp; &nbsp; List<Point> l = new ArrayList<>();&nbsp; &nbsp; l.add(pointList.get(0)); //the first element will always be added&nbsp; &nbsp; for (int i = 1; i < pointList.size(); i++) {&nbsp; &nbsp; &nbsp; &nbsp; if (!l.get(l.size()-1).equals(pointList.get(i))) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l.add(pointList.get(i));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return l;}
随时随地看视频慕课网APP

相关分类

Java
我要回答