2015-02-06 61 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中的相應項目具有相同的索引。