为了账号安全,请及时绑定邮箱和手机立即绑定

删除彼此相邻的重复项

删除彼此相邻的重复项

明月笑刀无情 2022-01-12 16:14:01
我有一个清单: private static List<Point> pointList = new ArrayList<>();。Point = 表示 3D 图形中一个点的对象。我可以将积分与方法进行比较:@Overridepublic 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 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您基本上需要保留对最后添加的对象的引用。如果您当前尝试添加的对象是相同的,那么您应该跳过它。


以下是使用您的代码的样子:


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;

}


查看完整回答
反对 回复 2022-01-12
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

根据您的描述,您的代码似乎没有做您想做的事情。


我想要的是删除列表中彼此相邻的重复点,因此列表看起来像 { 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;

}


查看完整回答
反对 回复 2022-01-12
  • 2 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信