содержит все для nCopies объекта в списке - PullRequest
2 голосов
/ 26 мая 2019

Я хотел бы проверить, содержит ли Arraylist n копий одного и того же элемента.Вот проблема:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class testMain {
    public static void main(String[] args) {
        myClass myObject = new myClass("haha1");

        ArrayList a = new ArrayList();
        a.add(myObject);
        a.add(new myClass("haha2"));
        a.add(new myClass("haha3"));

        List b;
        b = Collections.nCopies(5, myObject);
        System.out.println(a.containsAll(b)); //prints true
    }

    static private class myClass {
        String a;

        myClass(String a) {
            this.a = a;
        }
    }
}


Проблема 1: список b имеет больший размер, чем список a - должно быть ложным
Проблема 2: список b имеет более одного myObjectобъекты (в отличие от List a - должно быть ложным

Это не работает из-за того, как работает containsAll, так как я хочу увидеть, содержится ли объект myObject (в данном случае) 3 раза в списке a.

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

РЕДАКТИРОВАТЬ: Удалено пояснение для моего использования myClass, поскольку это противоречило приведенному примеру.

1 Ответ

2 голосов
/ 26 мая 2019

Используйте Collections.frequency(a,myObject) == 5 (или Collections.frequency(a,myObject) >= 5, если вы не возражаете, если ваш Collection имеет более 5 экземпляров pf myObject).

int java.util.Collections.frequency (Collection c, Object o)

Возвращает количество элементов в указанной коллекции, равное указанному объекту.Более формально, возвращает количество элементов e в коллекции, так что (o == null? E == null: o.equals (e)).

...