Сравнение объекта двух больших пользовательских списков в Java - PullRequest
0 голосов
/ 25 октября 2018

У меня есть вопрос о том, как сравнить два списка?
Это мой сценарий.
У меня есть два ArrayList (nameList<String> и countList<Integer>).Оба списка могут содержать повторяющиеся значения, и размер обоих списков также одинаков.
Теперь я должен объединить эти 2 списка в виде пары ключ-значение.Для этого я создал собственный список типа Person:

public class Person {

    private String name;
    private Integer charCount;

    public Person(String name, Integer charCount) {
        this.name = name;
        this.charCount = charCount;
    }

    public String Name() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getCharCount() {
        return charCount;
    }

    public void setCharCount(Integer charCount) {
        this.charCount = charCount;
    }
}

List<Person> plist1 = new ArrayList<Person>();
for (int i=0; i < nameList.size(); i++) {
    plist1.add(new Person(nameList.get(i), countList.get(i)));
}

Это дает мне значения правильно, как я хочу:
Джеймс, 5
Чарльз, 6
Ллойд, 5
Charles, 6

И я создал список для других данных, с точно таким же требованием, как указано выше, скажем, plist2.Теперь я должен сравнить эти два списка.То есть я должен проверить, содержится ли имя, содержащееся в plist1, также в plist2.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Хорошо, вот полная демонстрация того, что вы хотите сделать, и она сравнивает различные списки и показывает их результаты.В классе Person вам нужно реализовать метод equals, как я, а затем просто повторить оба списка в цикле for и сравнить оба объекта с тем же индексом, что и в списке.Если оба списка имеют разный размер, вы можете просто вернуть false.Проверьте этот код.

public class Person {

    private String name;
    private Integer charCount;

    public Person(String name, Integer charCount) {
        this.name = name;
        this.charCount = charCount;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getCharCount() {
        return charCount;
    }

    public void setCharCount(Integer charCount) {
        this.charCount = charCount;
    }

    public boolean equals(Object o) {
        if (o == null) {
            return false;
        }
        if (o instanceof Person) {
            Person person = (Person) o;
            return person.getName().equals(this.getName())
                    && person.getCharCount().intValue() == this.getCharCount().intValue();
        }
        return false;
    }

    public static void main(String[] args) {
        List<Person> list1 = Arrays.asList(new Person("a1", 1), new Person("a2", 2));
        List<Person> list2 = Arrays.asList(new Person("a1", 1), new Person("a2", 2));
        List<Person> list3 = Arrays.asList(new Person("a1", 1), new Person("a3", 3));
        // list4 content same as list1 but order different
        List<Person> list4 = Arrays.asList(new Person("a2", 2), new Person("a1", 1));

        System.out.println(compareList(list1, list2));
        // prints true as both list have same person objects and same order

        System.out.println(compareList(list1, list3));
        // prints false as both list have differing content

        System.out.println(compareList(list2, list3));
        // prints false as both list have differing content

        System.out.println(compareList(list1, list4));
        // prints false as both list have same content but differing order
    }

    public static boolean compareList(List<Person> list1, List<Person> list2) {
        if (list1.size() != list2.size()) {
            return false;
        }
        for (int i = 0; i < list1.size(); i++) {
            if (!list1.get(i).equals(list2.get(i))) {
                return false;
            }
        }
        return true;
    }

}
0 голосов
/ 25 октября 2018

Вы можете отсортировать два списка (сначала по полю имени, а затем по полю charCount), используя собственный компаратор, а затем выполнить итерацию по спискам, одновременно проверяя, совпадают ли соответствующие объекты из обоих списков.

Это даст вам одинаковые два списка в наборе объектов, которые они содержат (объекты могут быть разного порядка).Например:

plist1 --> James,5
           Charles,6
           Lloyd,5
           Charles,6

plist2 --> Lloyd,5
           Charles,6
           James,5
           Charles,6

равны в соответствии с алгоритмом, упомянутым выше, но в следующем сценарии они не будут считаться равными,

plist1 --> James,7
           Charles,6
           Lloyd,5
           Charles,6

plist2 --> Lloyd,5
           Charles,6
           James,5
           Charles,6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...