удаление дубликатов, которые находятся рядом друг с другом - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть список: private static List<Point> pointList = new ArrayList<>();.

Point = объект, представляющий точку на трехмерном графике.

Я могу сравнить очки с методом:

@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;
}

Но мне не хватает элементов.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Ваш код, кажется, не выполняет то, что вы хотите в соответствии с вашим описанием.

То, что я хочу, это удалить дубликаты точек, которые находятся рядом друг с другом в списке, поэтому список будет выглядеть так {a, b, a, c, a}

Следующая часть кода должна выполнить работу:

public List<Point> getUniq() {
    List<Point> l = new ArrayList<>();
    l.add(pointList.get(0)); //the first element will always be added
    for (int i = 1; i < pointList.size(); i++) {
        if (!l.get(l.size()-1).equals(pointList.get(i))) {
            l.add(pointList.get(i));
        }
    }
    return l;
}
0 голосов
/ 11 ноября 2018

Вам нужно сохранить ссылку на последний добавленный объект.Если объект, который вы сейчас пытаетесь добавить, совпадает, то вам следует его пропустить.

Вот как это будет выглядеть при использовании вашего кода:

public List<Point> getUniq() {
    List<Point> result = new ArrayList<>();
    Point lastAdded = null;
    for (int i = 0; i < pointList.size(); i++) {
        if (!points.get(i).equals(lastAdded)) { // previously added point was different
            lastAdded = points.get(i); // update previously added
            result.add(lastAdded); // add to result
        }
    }
    return result;
}
...