Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        3年前关闭。
                                                                                            
                
        
我有一个带有tmpOnBoard对象的ArrayList MoveToMoveTo对象由其他两个对象(PositionPiece)组成。

MoveTo.toString;


出:

MoveTo: wG1 (0,0)


wG1是片段的符号,
(0,0)是块的x / y坐标。

tmpOnBoard是由侦听器触发的方法制作的,因此它始终在变化。

如果在MoveTo中有两个或多个tmpOnBoard对象具有相同的Piece而另一个Position,则必须发生。

 [MoveTo: bS1 (-1,2), MoveTo: bS1 (2,-2)]


除最后一个对象外,所有具有相同MoveToPiece对象均应删除,因此列表为

[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对象具有用于PiecePosition的吸气剂

我尝试过的事情:

List<Piece> ref = new ArrayList<>();
        for (MoveTo moveTo : tmpOnBoard) {
            ref.add(moveTo.getPiece());
            if (ref.contains(moveTo.getPiece())) {
                tmpOnBoard.remove(moveTo);
            }
        }


任何帮助深表感谢!

最佳答案

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

警告:请确保您的Piece类具有不错的public boolean equals(Object o)public int hashCode()方法,它们的行为与预期的一样。

10-07 13:23