2017-10-10 85 views
0

你好,我正在比較兩個數組列表困惑,我的數組列表中的一個是:比較的ArrayList非相同的元素

private ArrayList<String> members = new ArrayList<>(); 
members.add("member123keyxyzmember123 number"); 
members.add("member456keyxyzmember456 number"); 
members.add("member789keyxyzmember789 number"); 
members.add("member2233keyxyzmember2233 number"); 
members.add("member1122keyxyzmember1122 number"); 

第二的ArrayList是:

private ArrayList<String> syncMembers = new ArrayList<>(); 
syncMembers.add("member123keyxyz123statuskeyxyz123photokeyxyzmember123 number"); 
syncMembers.add("member456keyxyz456statuskeyxyz456photokeyxyzmember456 number"); 

問題是我比較兩個,所以他們給我的號碼是在成員名單和不在syncMembers名單!

這是放出來應該是:

member789 number 
    member2233 number 
    member1122 number 


我一直在努力爲:

for (int i = 0; i < members.size(); i++) { 
     String stringFromMembersList = members.get(i); 
     String[] memberParts = stringFromMembersList.split("keyxyz"); 
     String memberNumber = memberParts[1]; 
     //Log.e("hgax", "sync:::" + memberNumber); 

     for (int j = 0; j < syncMembers.size(); j++) { 
      String stringFromSyncList = syncMembers.get(j); 
      String[] syncParts = stringFromSyncList.split("keyxyz"); 

      String n = syncParts[3]; 

      if (memberNumber.equals(n)) { 
       //Log.e("hgax", "hee:::" + n); 
       break; 
      } else { 
       Log.e("hgax", "ssshee:::" + memberNumber); 
      } 
     } 
    } 

我得到的輸出是:

member456 number 
    member789 number 
    member789 number 
    member2233 number 
    member2233 number 
    member2233 number 
    member1122 number 
    member1122 number 
    member1122 number 
    member1122 number 

我有點搞不清什麼是happeing我和我一直在做錯嗎?可有人告訴什麼錯誤我在做提前感謝

+0

這應該實現自己的目標? –

+0

在搜索整個'syncMembers'列表之前,您無法確定是否顯示它。您需要確保首先沒有匹配,如果沒有匹配,則從'members'顯示成員。只需使用'boolean'標誌來決定是否輸出,如果匹配則更新爲'true',並儘早終止'syncMembers'的搜索。 (編輯) –

+0

這是一個打字錯誤member456! –

回答

0

編輯:更新的答案,包括在arrayList

ArrayList<String> membersList = new ArrayList<>(); 
     ArrayList<String> syncMembersList = new ArrayList<>(); 
     for (int i = 0; i < members.size(); i++) { 
      String s = members.get(i).substring(members.get(i).lastIndexOf("member")); 
      membersList.add(s); 
     } 
     for (int j = 0; j < syncMembers.size(); j++) { 
      String s = syncMembers.get(j).substring(syncMembers.get(j).lastIndexOf("member")); 
      syncMembersList.add(s); 
     } 
     for (int i = 0; i < membersList.size(); i++) { 
      if (!syncMembersList.contains(membersList.get(i))) { 
       System.out.println(membersList.get(i)); 
      } 
     } 

原來這個混合值將打印您所需的輸出。

+0

不,它只給我在輸出成員名單 –

+0

這匹配你在你的問題發佈的輸出... – notyou

+0

運行你的代碼,看看我給你輸出! –

0

試着想想你需要檢查什麼來達到你的目標。爲了確定名單members中的成員不存在於syncMembers中,您必須檢查該成員的全部syncMembers列表。由於列表不相同(因爲您的問題狀態),因此您不能使用Collection.contains(Object o)。你爲什麼不使用記錄器或調試器來找出

// We need this initial check as if syncMembers is empty it'll display all members 
// And why bother to do this if syncMembers is empty anyway! 
if (!syncMembers.isEmpty()) { 
    for (String member : members) { 
     String memberNo = member.split("keyxyz")[1]; 
     int i = 0; 
     boolean found = false; 
     while (!found && i < syncMembers.size()) { 
      // Iterate over syncMembers until a match if found 
      // or we have exhausted the list 
      found = syncMembers.get(i).split("keyxyz")[3].equals(memberNo); 
      i++; 
     } 
     if (!found) { 
      // Display only if not found 
      System.out.println(memberNo); 
     } 
    } 
}