2012-01-05 3 views
-2

Этот вопрос относится к previously asked one. Как было предложено, я пытаюсь использовать библиотеку Google Guava для поиска пересечений множеств.Google Guava library

HashMap m1 = new HashMap(); 
m1.put(1, new Integer[]{1,2,3,4}); 
m1.put(2, new Integer[]{1,4,5,6}); 

HashMap m2 = new HashMap(); 
m2.put(1, new Integer[]{1,5,null,null}); 
m2.put(2, new Integer[]{1,4,null,null}); 

Теперь, насколько я понимаю, я должен применить функцию Guava entriesInCommon(), чтобы найти записи, которые появляются в обеих картах. Но я не понимаю, как я могу это сделать. Есть идеи? Благодарю.

UPDATE: ключи в карты

+3

Почему вы помещаете две записи с одним и тем же ключом в каждую карту? Вторая запись просто перезапишет первую. –

+0

@ALL: извините, это была моя синтаксическая ошибка. Обновлено сейчас. –

+4

Erm, почему бы не 'new Set (m1.keys()). RetainAll (m2.keys())'? Нет необходимости в Guava ... Этот новый набор будет содержать общие ключи. – fge

ответ

5

Добавление массивов целых чисел не будет работать в системе типа Java.

Когда вы говорите

Set<Integer> s1 = new HashSet<Integer>(); 
s1.add(new Integer[]{1,2,3,4}); 

, что вы должны писать либо

Set<Integer> s1 = new HashSet<Integer>(); 
s1.add(1); 
s1.add(2); 
s1.add(3); 
s1.add(4); 

или, возможно,

Set<Integer> s1 = new HashSet<Integer>(); 
s1.addAll(Arrays.asList(1, 2, 3, 4)); 

После того, как вы построили это, вы можете взять пересечение с помощью keepAll() и т.п.