在不同列表之间移动属性

时间:2014-03-26 00:20:05

标签: java algorithm list collections

我只想在两个不同的列表之间移动一个属性:

我有一个狗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项目中是否存在现有解决方案以避免 重新发明了轮子。

更新: 由于这似乎是主题,因为我要求库来执行此操作,现在我想知道使用工具或算法实现此目的的最佳方法。

感谢。

1 个答案:

答案 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());
        }
    }
}