2013-10-25 215 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 
相關問題