2013-10-18 83 views
2

我有2個對象列表,每個對象中都有一個字符串需要與另一個列表進行比較。Java從2個列表比較字符串的最佳方法

並且在匹配時使用來自第二個對象的值更新第一個對象中的getter。

這是最好的方法嗎?或者有沒有辦法在兩組之間做一個查找,也許一些番石榴工具?

for(firstObject fo : list1) 
{ 
    for (secondObject so : list2) 
    { 
     if (fo.getUserId().equals(so.getUserId())) 
     { 
      fo.setName(so.getName()); 
      fo.setEmail(so.getEmail()); 
     } 
    } 
} 
+0

我會考慮做 「等於」 比較的用戶ID,並具有方法從另一個實例初始化。第一個取決於您的實際業務邏輯。 –

+0

Dave提出的更改後,而不是嵌套循環(複雜性O(n ** 2))將一個列表轉換爲HashMap進行快速查找(複雜度O(n))。 – maaartinus

+0

@maaartinus它是O(n * m) – nachokk

回答

4

我覺得list2可以代替Map

Map<String,Object> map = new HashMap<String,Object>(); 
for(secondObject so : list2) 
{ 
    map.put(so.getUserId(),so); 
} 

那麼它看起來像這樣:

for(firstObject fo : list1) 
    { 
    Object so = map.get(fo.getUserId()); 
    if(null!=so) 
     { 
     fo.setName(so.getName()); 
     fo.setEmail(so.getEmail()); 
     } 
    } 
+0

這看起來很有意義 –

+1

@DocHoliday該解決方案還具有「O(n)」時間複雜性的優勢。 – Dev

+0

不錯........... –