我有一个带有tmpOnBoard
个对象的ArrayList MoveTo
。 MoveTo
对象由另外两个对象Position
和Piece
组成。
MoveTo.toString;
出:
MoveTo: wG1 (0,0)
wG1是一件作品的符号 (0,0)是该片的x / y坐标。
tmpOnBoard
是在一个由侦听器触发的方法中生成的,因此它会一直在变化。
如果MoveTo
中有两个或多个tmpOnBoard
个对象,Piece
但Position
为 [MoveTo: bS1 (-1,2), MoveTo: bS1 (2,-2)]
,则会发生什么。
MoveTo
应删除具有相同Piece
的所有[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
Piece
对象包含Position
和List<Piece> ref = new ArrayList<>();
for (MoveTo moveTo : tmpOnBoard) {
ref.add(moveTo.getPiece());
if (ref.contains(moveTo.getPiece())) {
tmpOnBoard.remove(moveTo);
}
}
我尝试的事情:
{{1}}
非常感谢任何帮助!
答案 0 :(得分:1)
建议:不要使用ArrayList来保存MoveTo对象,而是使用LinkedHashMap<Piece, MoveTo>
。向此Map添加新的MoveTo对象时,请使用MoveTo对象中的相同Key。这将为您提供类似列表的结构,维护插入顺序,并且不允许重复键输入。因此,如果您的地图包含某个部分的条目,并且您为同一部分添加了新条目,则旧条目将被丢弃。
警告:确保您的Piece类具有合适的public boolean equals(Object o)
和public int hashCode()
方法,其行为符合预期。