我想将一个列表中的对象添加到 Java 中另一个列表中的对象成员中。要添加的对象有一个成员,该成员标识另一个列表中的唯一元素。
有没有简单的方法可以做到这一点?
例如,在代表舰队的列表中添加每个水手到他的船。
class Sailor{
Integer ship_id;
}
class Ship {
Integer ship_id;
List<Sailor> sailors;
}
List<Sailor> sailors;
List<Ship> fleet;
最简单的方法是创建从 Id 到实际Ship
对象的关联。
例如,您可以Map<Integer, Ship>
在代码中的某个位置(这取决于结构,甚至可以作为Ship
.
有了这个Map
,它只是一个迭代你的问题Sailors
,并添加到相应的Ship
.
Map<Integer, Ship> shipMap = ....;
for(Sailor sailor: sailors) {
shipMap.get(sailor.shipId()).addSailor(sailor);
}
在代表舰队的列表中添加每个水手到他的船上。
不太清楚这意味着什么,但如果你正确地覆盖了 equals 和 ahscode(一致的、传递的、对称的、relfexive)。然后,您可以使用List.contains()检查对象是否在列表中。
据我了解,您需要以下内容:
//Add every sailor to his ship in a list representing the fleet.
public void addSailorToFleet(){
for(Sailor sailor : sailors){
for(Ship ship : fleet){
if(sailor.ship_id == ship.ship_id){
ship.sailors.add(sailor);
}
}
}
}
这具有 O(n^2) 复杂度。
另一种使用 Map 存储引用的解决方案(由 pcalcao 提供)以空间换时间。根据您的上下文,您可以选择其中任何一个。
使用地图存储参考的另一个缺点是,您总是需要在添加新船时更新地图。