Iterable<?> anzahl der Element

Schuriko

Bekanntes Mitglied
Ich arbeite mit Spring Data in meinem Project. findAll() gibt ein Iterable<?> mit allen Elementen zurück. Wie bekomme ich allerdings heraus wieviele Elemente zurückgeliefert wurden durch findAll()?
 
Java:
int anzahl = 0;
for (Object whatever : repository.findAll())
  anzahl++;
return anzahl;
Offensichtlich bietet das Iterable-Interface ja nur die Methode `iterator()` (plus natürlich noch weiter Java 8 Stream-relevante Methoden). Du bekommst also nicht direkt die Anzahl, ohne tatsächlich bis zum Ende zu iterieren. Es sei denn natürlich, du weißt, welche implementierende Klasse dahintersteckt, zu der du casten könntest, in der Hoffnung, dass diese Klasse als Implementierungsdetail des Persistence Providers eine Information über die Anzahl hält.
 
Die Frage sieht nach einem üblichen Fall von "Unsinnige Frage, weil Problem auf eine falsche Art und Weise versucht zu lösen" aus, von daher sind alternative Möglichkeiten durchaus sinnvoll...
 
Ich fand noch:
Java:
System.out.println(StreamSupport.stream(Spliterators.spliteratorUnknownSize( Stream.of("1","1","2","2","3").iterator() ,Spliterator.ORDERED),false).count());

String hier als Beispiel
 
Aber iteriert deine Lösung nicht ebenfalls alle Elemente durch und erhöht jeweils den Counter
ja, das Entscheidende ist hier doch dass nach einem funktionalen Ansatz mit count() gefragt wurde. Wie die JVM gestaltet ist kannst Du ja selber nachlesen.

@mrBrown Prolog 🙄 folgt dem logisch-deklarativen Ansatz, vielleicht meintest Du das....
 
das ist wie mit der Hintertür ins Haus.
Mit der Hintertür ins Haus? Dieses Sprichwort existiert nicht, weil es ja auch keinen Sinn macht. Wenn ich nicht auch durch die Hintertür ins Haus komme, was ist denn der Sinn der Hintertür? Und es ist ja auch nicht umständlicher als durch die Vordertür.
Das klingt etwas wie eine Mischung aus "mit der Tür ins Haus" (was hier nicht passt) und "von hinten durch die Brust ins Auge" (wäre hier wohl richtig). 🙂

Hach ja, das Leben ist kein Ponnyschlecken.
 

Zurück
Oben