Как определить, есть ли добавление или удаление или тот же объект в новом вложенном списке по сравнению со старым вложенным списком

у меня есть два списка, как показано ниже.

List<Component> oldComps =getOldComps();
List<Component> newcomps=getNewComps();

соответствующие POJOS:

public class Component {  
 private List<Endpoint> endpoints;
}

public class Endpoint {
private String path;    
}

У меня есть вариант использования, в котором мне нужно идентифицировать:


  1. есть ли в списках newComps и oldComps одинаковые данные или нет?
  2. есть ли какой-нибудь компонент добавлен / удален в newComps, которого нет в старых компах? если он есть, детали этого компонента.
  3. есть ли какой-либо endponit добавлен / удален в любом из компонентов списка newComps, которого нет в компоненте списка oldcomps? если он там, детали конечной точки.

newComps

oldComps

для подробного exaple: как показано на прикрепленных изображениях, если oldComps и newComps ==> содержит те же данные.

Дайте определение тем же данным. Мы говорим об одних и тех же объектах - Конечные точки - «==», или мы говорим об одних и тех же данных в смысле равенства?

Alexander Petrov 13.09.2018 19:49

Если вы можете реализовать equals и hashCode для класса Component, а затем использовать утилиту Collections коллекции Java, чтобы найти ответы на свои вопросы

Nghia Do 13.09.2018 19:50
1
2
66
3

Ответы 3

Вы можете получить хэш-код своей структуры данных, который является встроенной функцией многих современных языков программирования, для сравнения с другим.

Вы можете получить результат, вызвав метод hashCode () из нужного объекта. В вашем случае oldComps.hashCode () даст вам результат.

Для дальнейшего: hashCode () от Baeldung

Исходя из предположения, что у вас правильный хэш-код.

   HashSet oldComponentSet = new HashSet(oldComps);
    HashSet newComponentSet = new HashSet(newComps);
    //this line will give you intersection
    oldComponentSet.retainAll(setTwo);
    // this line will give you difference
    newComponentSet.removeAll(oldComponentSet)
    //united differfence based on presumption above two lines were not executed
    oldComponentSet.removeAll(newComponentSet).add(newComponentSet.removeAll(oldComponentSet));

@FedericoPeraltaSchaffner у меня плохо :) слишком привык к функциональному синтаксису. Сейчас исправлю.

Alexander Petrov 13.09.2018 20:30

Вы можете использовать метод .equals() для сравнения двух списков.

Чтобы найти любой компонент, которого нет в другом списке, вы можете использовать метод .removeAll() класса List для идентификации уникального элемента.

Другие вопросы по теме