2016-05-04 19 views
-2

Ich habe eine verknüpfte Liste, die Objekte für „Car“ speichert:in verlinkte Liste Objekttyp bestimmt

LinkedList<Car> cars = new LinkedList<Car>(); 

kann ein Auto entweder groß oder klein sein, und als solche werden diese in zwei Unterklassen aufgeteilt (LargeCar, Kleinwagen).

Ich muss meine verknüpfte Liste durchlaufen und die Anzahl der SmallCar-Objekte zählen.

Wie kann das gemacht werden?

+2

entweder verwenden 'instanceof' oder eine Methode in der' Car' Klasse zu stützen, die zurückkehren werden, ist es groß oder klein –

Antwort

2
int small = 0; 
int large = 0; 
for (Car nextCar : cars) { 
    if (nextCar instanceof LargeCar) { 
     large++; 
    } else if (nextCar instanceof SmallCar) { 
     small++; 
    } 
} 

Geschrieben freie Hand so kann der seltsame Tippfehler haben.

Experiment hier: code

0

könnten Sie groupingBy verwenden:

 LinkedList<Car> cars = new LinkedList<>(Arrays.asList(
       new LargeCar(),new LargeCar(),new LargeCar(),new LargeCar(), 
       new LargeCar(),new SmallCar(),new SmallCar(),new SmallCar() 
     )); 

     Map<Class, Long> counted = 
       cars.stream().collect(
        Collectors.groupingBy(Car::getClass, Collectors.counting())); 

     System.out.println(counted.get(LargeCar.class)); 
     System.out.println(counted.get(SmallCar.class));