Как превратить список в уникальный список? - PullRequest
2 голосов
/ 19 марта 2019

Итак, у меня есть эти два класса, ParentClass и ChildClass , и у меня есть эти данные (отображаются на jTable):

Child Class       Parent Class
Child Class 1     Parent Class A
Child Class 2     Parent Class A
Child Class 3     Parent Class B
Child Class 4     Parent Class A
Child Class 3     Parent Class B
...               ... 

Из этого ChildClass View Я пытаюсь получить весь родительский класс и поместить его в Уникальный список / набор , потому что я создам сводку для этого, сказав, Родительский класс A имеет это общее числоДетского класса , и я делаю так:

List<ParentClass> parents = new ArrayList<ParentClass>();
...
for(ChildClass child : childs){
    ParentClassDaoImpl parentClassDaoImpl = new ParentClassDaoImpl();
    ParentClass parent = parentClassDaoImpl.findParent(child.getParentId());
    if(parents.isEmpty()){
        parents.add(parent);
    }else{
        if(parents.indexOf(parent) == -1){//I have to check if this parent is already on my lists
            parents.add(parent);
        }
    }
}
...

Моя проблема в том, что я всегда получаю дубликат списка.Я пытался это, но я получаю тот же вывод:

...
if (!parents.contains(parent)) {
    parents.add(parent);
}
...

Кстати, я использую версию Java 1.6.

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Вместо списка, возможно, вы можете управлять Map<ParentClass, Set<ChildClass>>?

Ключом вашей карты будет родительский класс, а значением будет набор его дочерних элементов.

Таким образом, вы перебираете все дочерние элементы, и для каждого из них вы просто вызываете что-то вроде map.get(parent).add(child); Очевидно, до этого вы убедитесь, что если карта еще не содержит этого родительского элемента, вы инициализируете его набор дочерних элементов с пустым набором.:

if (!map.containsKey(parent)) {
   map.put(parent, new HashSet());
}

В конце вы можете выполнить итерацию по карте и отобразить размер каждого набора значений для каждого ключа ...

HTH!

2 голосов
/ 19 марта 2019

Каждый раз, когда вы получаете новый объект ParentClass, именно поэтому, когда бы вы ни проверяли, присутствует ли этот объект в списке или нет, он всегда говорит, что его нет, потому что он сравнивается со ссылкой на объект.

для сохранения уникальностисписок объектов либо переопределен методом equels(), либо просто используйте Map<ParentClass Id, ParentClass object>, а затем просто получите метод map.values().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...