Как подсчитать количество экземпляров определенного класса в arraylist?

У меня есть список массивов, который выглядит так:

[new Class1(), new Class2(), new Class1(), new Class1()]

Я хочу знать, наиболее эффективный способ извлечения количества экземпляров класса Class1 в списке выбора.

для приведенного выше примера я хочу получить ответ 3.

Я использую версию Java "1.7.0_79".

4 ответов


если arraylist, как показано ниже,

newClass1 = new Class1();

[newClass1, new Class2(), newClass1, newClass1]

затем вы можете проверить частоту, как показано ниже,

Collections.frequency(arrayList, newClass1);

если вы всегда добавляете новый экземпляр Class1, то ниже будет решение

[new Class1(), new Class2(), new Class1(), new Class1()]

переопределить метод equals в Class1, как показано ниже,

 @Override
public boolean equals(Object o){

    if(!(o instanceof Class1 )){
        return false;
    }else{

            return true;
    }
}

тогда в вашем тестовом классе,

System.out.println(Collections.frequency(array, new Class1()));

вы можете перебрать ArrayList и проверить, используя instanceof оператора.

for (Object e : lst)
{
  if (e instanceof Car)
  {
    carCount++;
  }
}

вам может потребоваться проверить класс в любой заданной позиции в массиве, используя ключевое слово instanceof

пример:

public static void main(String[] args) {
    Number[] myN = new Number[5];

    //populate... ignore this if  want
    for (int i = 0; i < myN.length; i++) {
        if (i%2==0) {
            myN[i]= new Integer(i);
        }else{
            myN[i]= new Double(i);
        }
    }
    int classACounter=0;
    int classBCounter=0;
    //check
    for (int i = 0; i < myN.length; i++) {
        if (myN[i] instanceof Integer){
            System.out.println(" is an int");
            classACounter++;
        }
        if (myN[i] instanceof Double){
            System.out.println(" is a double");
            classBCounter++;
        }
    }

    System.out.println("There are "+classACounter+" elements of the class A");
    System.out.println("There are "+classBCounter+" elements of the class B");
}

Ну, вы можете легко фильтровать их с помощью

result = Iterables.filter(collection, YourClass.java);

затем вы можете применить .size() на результат.