2015-11-24 100 views
0

我有各種ArrayList嵌套在一個HashMap中。Java - 檢查ArrayList是否存在嵌套在HashMap中的值

如何檢查我的數組列表是否存在於散列表中?

public static HashMap<Integer, ArrayList<Integer>> transactionMap = new HashMap<Integer, ArrayList<Integer>>(); 

public static void initializeLists() { 
    transactionMap.put(7, new ArrayList<Integer> (Arrays.asList(1050, 1125))); 
    transactionMap.put(305, new ArrayList<Integer>(Arrays.asList(1125))); 
    transactionMap.put(1125, new ArrayList<Integer>(Arrays.asList(250, 252, 251))); 
    transactionMap.put(1050, new ArrayList<Integer>(Arrays.asList(251, 252))); 
    transactionMap.put(1124, new ArrayList<Integer>(Arrays.asList(250))); 
    transactionMap.put(1049, new ArrayList<Integer>(Arrays.asList(251, 252))); 
} 

這篇文章here介紹如何直接在Array List使用#contains(Object),它不適合HashMap檢查。

one是接近,但這意味着我將不得不給我的名單列出所有的名單(並可能有很多)。如果可能的話,我想避免在地圖中嵌套地圖,除非需要。 有沒有人有任何指向最佳解決方案?

+0

你爲什麼不乾脆用一個''地圖<整數,INT []> ''而不是?順便說一句。你的例子不是有效的java代碼。 –

+0

如果您可以使用Guava,可以使用Multimap,特別是[ArrayListMultimap](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ArrayListMultimap.html ),然後使用['multimap.containsValue'](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ArrayListMultimap.html#containsValue(java.lang。目的))。否則,您需要遍歷所有值,每個值都調用'contains',直到找到一個。 –

+0

使用containsValue方法 – Tommy

回答

1

如果你的問題是「我怎麼檢查是否有具體名單是在地圖的值」,那麼你可以如下做到這一點:

if (transactionMap.containsValue(Arrays.asList(1, 2, 3)) { 
    ... 
} 

如果你的問題是「我如何檢查是否具體整數列表中的某個地方出現在地圖的值」,那麼你可以做以下(使用Java 8):

if (transactionMap.values().stream().anyMatch(l -> l.contains(17)) { 
    ... 
} 
+0

我的地圖中的每個鍵都有一個不同的ArrayList:/我需要能深入地進入數組列表在地圖中的關鍵。 – Aurax22

+0

@ Aurax22其實你的鑰匙是一個簡單的整數 - 不是一個列表。值是列表。 – sprinter

+0

我猜你的意思是「深入地圖中的數值的數組列表」。我已經爲我的答案添加了一個解決方案。 – sprinter