2016-04-06 11 views

risposta

2

se l'arraylist è come qui di seguito,

newClass1 = new Class1(); 

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

quindi è possibile controllare la frequenza come di seguito,

Collections.frequency(arrayList, newClass1); 

Se si sta aggiungendo sempre nuova istanza di Class1 quindi al di sotto sarà la soluzione

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

Override è uguale metodo Class1 come qui di seguito,

@Override 
public boolean equals(Object o){ 

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

      return true; 
    } 
} 

poi nella classe di test,

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

purtroppo non lo è ma mi è piaciuta la tua idea :) molte grazie per l'input - stavo pensando/sperando anche in queste righe ... ma aspetta davvero ripensandoci penso di poterlo cambiare per abbinare questo - yay, molte molte grazie - anche se ero a conoscenza di Collections.frequency l'avevo già scontato ma questo post mi ha fatto pensare :) – danday74

+1

sei il benvenuto! Per favore controlla la mia risposta modificata, ho trovato una soluzione per il tuo nuovo arraylist di istanze di Class1. –

+0

risposta sorprendente grazie - provalo subito :) – danday74

7

È possibile scorrere l'elenco Array e controllare utilizzando l'operatore instanceof.

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

grazie per la risposta - sperando in qualcosa di un po 'più intelligente O più efficiente ma la tua risposta è molto apprezzata – danday74

+0

Prego! – Logan

+4

Non c'è davvero un modo più efficiente, a meno che non si mantenga un conto corrente mentre si sta creando l'elenco. A proposito, 'instanceof' sarà' true' per gli oggetti delle classi che estendono 'Car', così come' Car' stessa. Se questo non è ciò che vuoi, allora fallo 'if (e.getClass() == Car.class)'. – ajb

2

Puoi necessario controllare la classe in qualsiasi posizione nella matrice utilizzando la parola chiave instanceof

Esempio:

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

Bene, puoi facilmente filtrarli di

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

quindi è possibile applicare .size() sul risultato.

Problemi correlati