合并索引上的两个列表

时间:2015-02-06 14:25:27

标签: java arrays list object

我有两个包含相同类型对象的列表。每个对象都有一个int,一个字符串和一些其他东西,其中int是它的索引。

以下是两个清单所持有的对象:

public class ListElement
{
    private int index;
    private String data;
    private String some;
    private String other;
    private String stuff;

    // gets, sets...

}

我想要的是获取List A的索引和“其他一些东西”并将其字符串“data”替换为List B中的那个。从List B中获取的那个应该与List A的索引相匹配。我希望这样是可以理解的。

编辑:应该注意的是,对象内的索引int与列表中对象的实际位置无关。它适用于其他porpuses

4 个答案:

答案 0 :(得分:2)

更新:您提到index的{​​{1}}字段与其包含列表中的实际位置无关。

你恰好有一个随机名称的字段要比较两个列表(加入)。此解决方案使用嵌套循环将一个列表中的每个元素与另一个列表中的每个元素进行比较。

ListElement

答案 1 :(得分:1)

假设您的两个列表具有相同数量的元素,您可以执行以下操作:

ListElement sourceElement, destElement;
for (int i =0; i<list1.size(); i++) {
    sourceElement = list1.get(0);
    destElement = list2.get(0);
    sourceElement.setData(destElement.getData());
    ...
}

答案 2 :(得分:1)

第一个想法可能不是最聪明的,但我稍后会谈到。

For (ListElement e : ListA) {
  For (ListElement le : ListB) {
    if (e.getIndex() = le.getIndex()) {
      e.setData(le.getData());
    }
  }
}

所以这是我写的第一个镜头,但这可能不是最简单的方法。为了使它更简单,更快,您可以实现接口Comparable并使用sort,在这种情况下,您可以通过ListElement中的索引访问List元素(假设您确保索引从1..n完成) )。 我最喜欢的解决方案是使用某种maps将索引存储为键,将ListElement存储为值,然后它只是MapA.get(i).setData(MapB.get(i).getData())这是傻瓜证明,只要对于MapA中的每个项目MapB中的相关项目具有相同的索引。

答案 3 :(得分:0)

如果您想匹配index对象上的ListItem字段,请尝试以下操作:

for (ListItem listItemA : listA) {
    for (ListItem listItemB : listB) {
        if (listItemB.getIndex() == listItemA.getIndex()) {
            listItemA.setData(listItemB.getData());
        }
    }
}

如果您对基于List对象中的索引的匹配感兴趣,请尝试

for (int i = 0; i < listA.size(); i++) {
    listA.get(i).setData(listB.get(i).getData());
}