2017-10-10 108 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); 
     } 
    } 
}