2015-05-12 2 views
1

У меня есть два спискаУдалить все объекты из списка, которые не существуют в другом списке

List<Map<String,Object>> list1 = new ArrayList<Map<String,Object>>(); 
    List<Map<String,Object>> list2 = new ArrayList<Map<String,Object>>(); 

    HashMap<String, Object> hm = new HashMap<String, Object>(); 
    hm.put("1", new Long(1L)); 
    HashMap<String, Object> hm2 = new HashMap<String, Object>(); 
    hm2.put("2", new Long(2L)); 
    HashMap<String, Object> hm3 = new HashMap<String, Object>(); 
    hm3.put("3", new Long(3L)); 
    HashMap<String, Object> hm4 = new HashMap<String, Object>(); 
    hm4.put("4", new Long(4L)); 

    list1.add(hm); 
    list1.add(hm2); 
    list1.add(hm3); 
    list1.add(hm4); 

    HashMap<String, Object> hm1 = new HashMap<String, Object>(); 
    hm1.put("1", new Long(1L)); 
    HashMap<String, Object> hm5 = new HashMap<String, Object>(); 
    hm5.put("2", new Long(2L)); 

    list2.add(hm1); 
    list2.add(hm5); 

Я хочу, чтобы удалить все объекты из list1, которые не существуют в другом list2
Мой ожидается выход list1 -- [{2=2, 1=1}]

Я могу перебирать через list1 и могу проверить, присутствует ли элемент, а затем ничего не удалять. Но я хочу знать, есть ли лучший подход или более простой код?

+0

Дубликат http://stackoverflow.com/questions/16888265/remove-all-objects-in-an-arraylist-that-exist-in-another-arraylist? –

+0

Используете ли вы Java 8? – MadConan

+0

java version "1.6.0_43" – Amar

ответ

5

Метод Collection.retainAll существует именно для этой цели:

Сохраняет только элементы в этой коллекции, которые содержатся в указанном наборе. Другими словами, удаляет из этой коллекции все ее элементы, которые не содержатся в указанной коллекции.

Использования будет:

list1.retainAll(list2); 

Это не может быть более эффективным, чем наивный итерационным подход, однако, если вы не используете Set с вместо List с.

Смежные вопросы