2016-04-06 2 views

Antwort

2

, wenn die Arraylist ist unten wie,

newClass1 = new Class1(); 

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

dann können Sie die Frequenz wie unten,

überprüfen
Collections.frequency(arrayList, newClass1); 

Wenn Sie immer neue Instanz von Class1 Zugabe werden dann unter der Markierung die Lösung

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

Überschreibung Methode in Class1 gleich wie unten,

@Override 
public boolean equals(Object o){ 

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

      return true; 
    } 
} 

dann in der Testklasse,

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

leider nicht, aber ich liebte deine Idee :) vielen Dank für die Eingabe - ich dachte/hoffe in diese Richtung auch ... aber warte eigentlich auf zweite Gedanken ich denke, ich kann es ändern, um dies zu entsprechen - yay, vielen vielen Dank - obwohl ich von Collections.frequency wusste, hatte ich es bereits abdiscount aber dieser Post hat mich denken :) – danday74

+1

Gern geschehen! Bitte überprüfen Sie meine bearbeitete Antwort, ich habe Lösung für Ihre neue Class1-Instanzen-Arraylist. –

+0

erstaunliche Antwort Danke - probieren Sie es jetzt aus :) – danday74

7

Sie könnten durch die ArrayList iterieren und mit dem Operator instanceof überprüfen.

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

danke für die Antwort - in der Hoffnung auf etwas ein bisschen cleverer ODER effizienter, aber Ihre Antwort wird sehr geschätzt – danday74

+0

Gern geschehen! – Logan

+4

Es gibt wirklich keinen effizienteren Weg, es sei denn, Sie behalten eine laufende Zählung, während Sie die Liste erstellen. Übrigens wird "instanceof" für Objekte von Klassen, die "Car" und "Car" selbst erweitern, "wahr". Wenn das nicht das ist, was du willst, dann mache es 'if (e.getClass() == Car.class) '. – ajb

2

Sie benötigen, können über das Schlüsselwort instanceof

Beispiel die Klasse an jeder beliebigen Stelle in der Anordnung zu überprüfen:

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"); 
} 
2

Nun, Sie können sie leicht filtern von

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

dann können Sie .size() auf das Ergebnis anwenden.

Verwandte Themen