我想将一个列表中的对象添加到Java中另一个列表中的对象成员。 要添加的对象具有标识其他列表中唯一元素的成员。
有一种简单的方法吗?
e.g。在代表船队的清单中将每个水手添加到他的船上。
class Sailor{
Integer ship_id;
}
class Ship {
Integer ship_id;
List<Sailor> sailors;
}
List<Sailor> sailors;
List<Ship> fleet;
答案 0 :(得分:4)
最简单的方法是创建从Id到实际Ship
对象的关联。
例如,您可以在代码的某个位置Map<Integer, Ship>
(这取决于结构,甚至可以作为Ship
的静态成员。
拥有此Map
,只需迭代Sailors
,然后添加到相应的Ship
。
Map<Integer, Ship> shipMap = ....;
for(Sailor sailor: sailors) {
shipMap.get(sailor.shipId()).addSailor(sailor);
}
答案 1 :(得分:0)
将每个水手加到他的船上,代表船队。
不太确定这意味着什么,但是如果你正确地覆盖equals和ahscode(一致,transistive,对称,relfexive)。然后,您可以使用List.contains()检查对象是否在列表中。
答案 2 :(得分:0)
根据我的理解,您需要以下内容:
//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)将空间换掉时间。根据您的具体情况,您可以选择。
使用Map存储引用的另一个缺点是,您总是需要在添加新Ships时更新Map。