我只想在两个不同的列表之间移动一个属性:
我有一个狗List<Dog>
public class Dog{
private int id;
private String name;
private String newValue;
}
在第一个列表中,我没有 newValue 属性的值。
第二个列表是List<DogProp>
public class DogProp{
private int id;
private String newValue;
}
在第二个列表中,我有 newValue 属性的值。
我想要的是将 newValue 属性从List<DogProp>
移至List<Dog>.
在这种情况下,列表可以包含不同数量的元素和不同的元素,这意味着列表的大小可以不同,也可以是元素。
我想要的操作如下:
List<DogProp>
中的ID属性与List<Dog>
中的id属性匹配,我想从List<DogProp>
移动 newValue 属性到List<Dog>
我知道我可以创建某种算法来做到这一点,但我想知道在某些谷歌项目或apache commons项目中是否存在现有解决方案以避免 重新发明了轮子。
更新: 由于这似乎是主题,因为我要求库来执行此操作,现在我想知道使用工具或算法实现此目的的最佳方法。
感谢。
答案 0 :(得分:0)
我和@Alan一样,也不确定内置的解决方案,但也同意Alan的意见,编写自己的算法来完成这个技巧应该是相当直接的。 - 遍历两个列表,创建两个将id映射到Dog / DogProp对象的词典。然后循环遍历dogProps,如果匹配任何Dog对象的ID,则执行替换。
以下是代码:
static void transferDogProps(List<Dog> dogList, List<DogProp> dogPropList){
Dictionary<String,Dog> dogDictionary = new Dictionary<String,Dog>();
Dictionary<String,DogProp> dogPropDictionary = new Dictionary<String,DogProp>();
foreach(Dog dog in dogList) dogDictionary.Add(dog.getId(),dog);
foreach(Dog dogProp in dogPropList) dogPropDictionary.Add(dogProp.getId(),dogProp);
foreach(String id in dogPropList.Keys){
if(dogDictionary.ContainsKey[id]){
Dog matchingDog = dogDictionary[id];
DogProp matchingDogProp = dogPropDictionary[id];
matchingDog.setNewValue(matchingDogProp.getNewValue());
}
}
}