Как я могу сравнить два списка с / без итерации по каждому списку - PullRequest
0 голосов
/ 25 июня 2018

Как я могу сравнить два вышеупомянутых списка с / без итерации по каждому списку? Я хотел бы сравнить список people1 без итерации по списку людей.когда сопоставление происходит, он печатает соответствующий объект, иначе он должен печатать не соответствующий объект.Я должен сделать это без повторения второго списка.

import java.util.*;

public class Person implements Comparable<Person> {
    String name;
    int age;
    String mail;

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public Person(String name, int age, String mail) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String toString() {
        return name + " : " + age;
    }

    public int compareTo(Person p) {
        return getMail().compareTo(p.getMail());
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

        if (obj == null) {
            return false;
        }

        if (getClass() != obj.getClass()) {
            return false;
        }

        return false;
    }

    public static void main(String[] args) {
        List<Person> people = new ArrayList<Person>();

        people.add(new Person("Homer", 38, "shankar@gmail.com"));
        people.add(new Person("Marge", 35, "shankar6@gmail.com"));
        people.add(new Person("Bart", 15, "ramr@gmail.com"));
        people.add(new Person("Lisa", 13, "ramkumar@gmail.com"));

        System.out.println("\t" + people);

        List<Person> people1 = new ArrayList<Person>();

        people1.add(new Person("jug", 38, "jug@gmail.com"));
        people1.add(new Person("benny", 35, "benny@gmail.com"));
        people1.add(new Person("Bart", 15, "ramr@gmail.com"));
        people1.add(new Person("Lisa", 13, "ramkumar@gmail.com"));

        for (Person people : people) {
            if (people1.contains( people)) { 
                System.out.println("matched");
                System.out.println(people);
            } else {
                System.out.println("not matched");
                System.out.println(people);
            }
        }
    }
}

ожидаемый результат:

matched
Bart : 15 :ramr@gmail.com

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Коллекции имеют:

people.retainAll(people1) // for intersection
people.addAll(people1) // for union
0 голосов
/ 25 июня 2018

если вы используете Java 8, вы также можете использовать для этого поток.

    for (Person p : people) {
            if(people1.stream().filter(i -> i.equals(p)).findFirst().isPresent()){
                System.out.println("matched");
                System.out.println(p);
            }
            else{
                System.out.println("not matched");
                System.out.println(p);
            }
     }

Здесь я переопределяю метод equals в классе Person, который возвращает true, если все свойства одного объекта соответствуют другому.

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person p = (Person) obj;
        if(getName() == p.getName() && getAge() == p.getAge() && getMail() == p.getMail())
            return true;
        else
            return false;
    }    
0 голосов
/ 25 июня 2018

Прежде всего, вам нужна правильная реализация метода equals.Затем вы можете использовать List#retainAll, который «сохраняет только элементы в этом списке, которые содержатся в указанной коллекции (необязательная операция). Другими словами, удаляет из этого списка все его элементы, которые не содержатся в указанной коллекции».

Скопируйте исходный список в некоторый список, если вы хотите сохранить исходный список, например: copyofPeople, тогда вы можете использовать copyofPeople.retainAll(people1).Теперь, если copyofPeople пусто (copyofPeople.size()==0), тогда нет общего элемента.

Если ваше логическое равенство зависит от электронной почты человека, тогда метод equals должен выглядеть следующим образом:

@Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (mail == null) {
            if (other.mail != null)
                return false;
        } else if (!mail.equals(other.mail))
            return false;
        return true;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...