2015-02-06 60 views
0

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

下面是两个列表持有对象:

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

    // gets, sets... 

} 

我要的是采取列表A的指数和“其他一些东西”,并从列表B中的一个替换它的字符串“数据”它从列表B中获得的应该与列表A的索引匹配。我希望这是可以理解的。

编辑:应该指出的是,对象内部的索引int与列表中对象的实际位置无关。它对其他porpuses

+0

因此嵌套for循环?遍历ListA,找到ListB的匹配元素(如果有的话)并执行操作。 – ryanyuyu 2015-02-06 14:29:26

+0

如果我们想要索引匹配,嵌套不应该是必要的。 – fzzfzzfzz 2015-02-06 14:31:22

+1

这是相对于其包含数组的索引,还是只是一个称为索引的巧合int字段? – ryanyuyu 2015-02-06 14:32:54

回答

2

更新:您提到ListElementindex字段与其包含列表中的实际位置没有任何关系。

你只是碰巧有一个随机名称的字段,你想比较两个列表(加入)。该解决方案使用嵌套循环来比较一个列表中的每个元素与另一个列表中的每个元素。

for (int iA = 0; iA < listA.size(); iA++) //iterate over listA 
{ 
    ListElement currentElement = listA.get(iA); 
    for (int iB = 0; iB < listB.size(); iB++) //iterate over listB 
    { 
     ListElement other = listB.get(iB); 
     if (other.index == currentElement.index) //compare the elements 
     { 
      //do stuff 
      currentElement.setData(other.getData()); 
      break; //if only want first match 
     }   
    } 
} 
1

假设你的两个列表有相同数量的元素,你可以这样做:

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

如果你想匹配的ListItem对象的index领域,试试这个:

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()); 
} 
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中的相应项目具有相同的索引。