2013-06-12 22 views
2

親愛的我所有我比較Android中的兩個列表,如果兩個值是相同的,它是返回true,但罰款,但我想知道有多少值是正確的列表字符串之間,如果它是不匹配如何實現這個幫助表示讚賞。以下是我的代碼。在android中比較兩個列表<String>值

  List<String> list1 = new ArrayList<String>(i1.values()); 
      ///list 1 = [-ful; to be full of; play; playful; full of play] 
    List<String> acct_Rte_Cdes_A = Arrays.asList(result) ; 
      ///acct_Rte_Cdes_A = [-ful; to be full of; play; playful; full of play] 
      if (list1.equals(acct_Rte_Cdes_A)) { 
       // do what you want to do if the string is there 
       //System.out.println("True"); 
    } else { 
     System.out.println("False"); 
     } 
+0

如果它們不相等,則循環遍歷它們自己比較項目1by1並保留一個簡單的整數作爲每次項目匹配時遞增的計數。 –

+0

在同一個問題上掙扎,你有答案嗎?如果是這樣,請發佈正確的答案。我需要從這兩個列表中獲得共同的價值觀。我跟着一些帖子,但那不工作。 – Madhu

回答

1
int correctCount=0, incorrectCount = 0; 
List<String> list1 = new ArrayList<String>(i1.values()); 

List<String> acct_Rte_Cdes_A = Arrays.asList(result)  

for(String tmp1: list1) { 
    for(String tmp2: list2) { 
     if(tmp1.compareTo(tmp2) == 0) { 
      correctCount++; 
     } else { 
      incorrectCount++; 
     } 
    } 
} 

它的時間複雜度很高,但它會伎倆。

+0

這是檢查我的列表中的所有字符串,並返回我想要多少是正確的有多少錯誤在我的列表中不作爲一個整體 – user1048958

0
list1.containsAll(acct_Rte_Cdes_A) 

boolean containsAll(Collection<?> c) 

返回true,如果這個列表包含所有 指定集合的​​元素。

1

你可以迭代遍歷列表自己檢查是否相等,同時保持一個計數器來指示它們在哪個位置不同。

樣品(僞)代碼:

//if equal return 0, else position of difference 
//keep in mind that item at index [0] is first, so return would be 1 if lists differ there 
public int checkEquality(List list1, List list2) { 
    for (int i = 0; i < list1.size(); ++i) { 
     if (list1[i] != list2[i]) 
      return i + 1; 
    } 
    return 0; 
} 

也請記住,你不得不檢查列表是相同的大小,並決定,如果他們不這樣做什麼(例如,返回-1來表示這個)。

3

使用Collection#retainAll()。像

List<Integer> common = new ArrayList<Integer>(listA); 
common.retainAll(listB); 
// common now contains only the elements which are contained in listA and listB. 

所以你可以檢查大小,如果它大於0它意味着一些元素是常見的。哪些是常見元素common會告訴。

1

您可以在Java集合上使用containsAll方法。這是一個例子。

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class MainClass { 

    public static void main(String[] a) { 
    String elements[] = { "A", "B", "C", "D", "E" }; 
    List<String> list = new ArrayList<String>(Arrays.asList(elements)); 

    elements = new String[] { "A", "B", "C" }; 
    List<String> list2 = new ArrayList<String>(Arrays.asList(elements)); 

    System.out.println(list.containsAll(list2)); // true 
    System.out.println(list2.containsAll(list)); // false 
    } 
} 

否則,您可以使用阿帕奇CollectionUtils庫,以提高性能。根據所提供的Collection類型,此方法將比調用Collection.containsAll(Collection)快得多。 查看apache文檔containsAll here