2013-10-25 165 views
1

我需要检查,如果任何一个ArrayList中的值存在于另一个数组列表:检查是否在一个ArrayList中值存在于另一个

import java.util.ArrayList; 

public class SampleCode { 

    ArrayList<Integer> in = new ArrayList<>(); 
    ArrayList<Integer> is = new ArrayList<>(); 
    public static void main(String[] args) { 
     new SampleCode().work(); 
    } 
    public void work(){ 
     in.add(3);in.add(4);in.add(5); 
     is.add(1);is.add(2);is.add(3); 
     if(is.containsAll(in)){ 
      System.out.println("It does not contain"); 
     } 
    } 
} 

它打印“它不包含”。我需要知道是否有方法来比较这两个数组列表,如果其他数列中存在任何值,则应该返回false。我知道迭代可以提供帮助。有没有简单的方法来做到这一点?

+1

我得到它。你需要一种'List#containsNone(List)'方法吗? – sp00m

回答

6

我认为你可以使用

Collections.disjoint

它说

Returns true if the two specified collections have no elements in common.

所以如果有任何共同的元素将返回false。

0
Collections.disjoint(list1, list2); 

是你的答案

请参见集合文档

1

试试这个

public void work(){ 
     in.add(3);in.add(4);in.add(5);; 
     is.add(1);is.add(2);is.add(3);; 
     ArrayList<Integer> matched = new ArrayList<Integer>(in); 
     matched.retainAll(is); 
     if(matched.size()>0){ 
      System.out.println(matched); 
     }else{ 
      System.out.println("It does not contain"); 
     } 
    } 
0
public boolean isListNotOverlapping(List<Integer> yourList1, List<Integer> yourList2) { 
    for(Integer i : yourList1) { 
     if (yourList2.contains(i)) { 
      return false; 
     } 
    } 
    return true; 
} 
1
Collection.indexOfSubList(List<?> source, List<?> target) 

返回杉的起始位置在指定的源列表内出现指定的 目标列表,如果不存在 这样的情况,则返回-1。

更正式地说,如果没有这样的索引,则返回最低的索引i,使得source.subList(i,i + target.size())。等于(目标),或-1。 (如果target.size()> source.size(),则返回-1) 此实现使用“源码”列表上的“强力”扫描技术,依次在每个位置查找与目标的匹配。

Collections.disjoint(Collection<?> c1, Collection<?> c2) 

返回true如果两个指定collection中 没有相同的元素。

如果此方法用于不符合集合通用合同的集合,则必须小心。实现可以选择迭代收集和测试其他集合中的遏制(或执行任何等效计算)。如果两个集合使用非标准的相等性测试(就像SortedSet的排序与equals不相容,或者IdentityHashMap的键集合一样),那么这两个集合都必须使用相同的非标准相等性测试,否则此方法的结果是未定义的。 使用对可能包含的元素有限制的集合时,还必须小心。允许集合实现为涉及他们认为不合格的元素的任何操作抛出异常。为了绝对安全,指定集合应仅包含适用于这两个集合的元素。 请注意,允许在两个参数中传递相同的集合,在这种情况下,只有当集合为空时,该方法才会返回true。

抛出

NullPointerException - 如果一个集合包含一个null元素,空是不为别的收集符合条件的元素。 (可选)NullPointerException - 如果一个集合包含空元素,并且null不是其他集合的合格元素。 (可选)ClassCastException - 如果一个集合包含的元素的类型不符合其他集合的类型。 (可选)

1

另一种可能的解决方案:

public static boolean containsNone(List<?> list, List<?> of) { 
    List<?> temp = new ArrayList<Object>(list); 
    temp.retainAll(of); 
    return temp.isEmpty(); 
} 

例如:

List<String> ref = Arrays.asList("w1", "w2", "w3"); 
List<String> ok = Arrays.asList("w4", "w5"); 
List<String> ko = Arrays.asList("w1", "w5"); 
System.out.println(containsNone(ok, ref)); 
System.out.println(containsNone(ko, ref)); 

打印:

true 
false 
相关问题