2013-06-12 19 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