Java-删除ArrayList中的项

Java-删除ArrayList中的项,java,arraylist,Java,Arraylist,我有一个带有MoveTo对象的ArrayListtmpOnBoard。MoveTo对象由另外两个对象构成,一个是位置和一个片段 MoveTo.toString; 输出: wG1是一个片段的符号,并且 (0,0)是工件的x/y坐标 tmpOnBoard是在侦听器触发的方法中创建的,因此它会一直更改 必须发生的是,如果tmpOnBoard中有两个或多个MoveTo对象,它们具有相同的块,但具有另一个位置 [MoveTo: bS1 (-1,2), MoveTo: bS1 (2,-2)] 除最后一

我有一个带有
MoveTo
对象的ArrayList
tmpOnBoard
MoveTo
对象由另外两个对象构成,一个是
位置
和一个
片段

MoveTo.toString;
输出:

wG1是一个片段的符号,并且 (0,0)是工件的x/y坐标

tmpOnBoard
是在侦听器触发的方法中创建的,因此它会一直更改

必须发生的是,如果
tmpOnBoard
中有两个或多个
MoveTo
对象,它们具有相同的
,但具有另一个
位置

 [MoveTo: bS1 (-1,2), MoveTo: bS1 (2,-2)]
除最后一个对象外,应删除具有相同
工件的所有
MoveTo
对象,以便列表

[MoveTo: bS1 (2,-2)]
另一个例子:

 [MoveTo: wB1 (-1,2), MoveTo: bG2 (0,0), ... MoveTo: wB1 (2,-2), MoveTo: wB1 (-7,4)]
应该去

 [MoveTo: bG2 (0,0), ... MoveTo: wB1 (-7,4)]
MoveTo
对象具有用于
片段的getter
位置的getter

我尝试过的事情:

List<Piece> ref = new ArrayList<>();
        for (MoveTo moveTo : tmpOnBoard) {
            ref.add(moveTo.getPiece());
            if (ref.contains(moveTo.getPiece())) {
                tmpOnBoard.remove(moveTo);
            }
        }
List ref=new ArrayList();
用于(移动到移动到:tmpOnBoard){
ref.add(moveTo.getPiece());
if(ref.contains(moveTo.getPiece())){
t主板。卸下(移动到);
}
}

非常感谢您的帮助

建议:不要使用ArrayList保存MoveTo对象,而是使用
LinkedHashMap
。将新的MoveTo对象添加到此地图时,请使用MoveTo对象中的同一关键点。这将为您提供一个类似列表的结构,该结构保持插入顺序,并且不允许重复的键输入。因此,如果您的地图包含某个项目的条目,并且您为同一项目添加了新条目,则旧条目将被丢弃


警告:请确保您的Piece类具有适当的
公共布尔等于(对象o)
公共int hashCode()
方法,这些方法的行为符合预期。

您的问题是什么?我尝试了几种方法,但都没有成功。所以我的问题基本上是你如何做到这一点。请澄清——你在这方面遇到了什么问题?到目前为止,您编写了什么代码来开始解决这个问题?“好几件事”和“没有一件成功”并没有给我们太多可以继续的东西。请不要指望这里的人能从零开始为您解决所有问题。也许使用a就是您所追求的,添加片段并移动到对象?LinkedHashmap有效@用户138770:我很高兴它这么做了,但是再一次,请看我上面的警告。您的Piece类绝对必须有一个像样的equals和hashCode方法。如果你不清楚这一点,你最好学习这门学科,因为它非常重要。
List<Piece> ref = new ArrayList<>();
        for (MoveTo moveTo : tmpOnBoard) {
            ref.add(moveTo.getPiece());
            if (ref.contains(moveTo.getPiece())) {
                tmpOnBoard.remove(moveTo);
            }
        }