Ich habe eine java.lang.Iterable
, die ihre Werte träge berechnet. Ich rufe von Scala aus darauf zu. Gibt es eine Kern-API-Möglichkeit, nur bestimmte Werte zurückzugeben? Zum Beispiel gab es eine Filtermethode, die auch alle bisher zurückgegebenen Ergebnisse lieferte:
Ich nehme an, das ist kein sehr allgemeiner Fall, weil damit zuvor zurückgegebene Elemente gespeichert werden, und das könnte der Grund sein, warum es nicht in der Kern-API ist.
Ich weiß über List.distinct
und Set
s, aber ich möchte etwas, das seine Elemente nicht berechnet, bis gefragt.
Sie können die Methode distinct
für Stream
Iterable
haben:
Sie können schreiben:
%Vor%Wir können sagen, dass alles angemessen faul ist, da der Stream unendlich ist.
UPDATE Fragen sorgfältig zu lesen ist gut. Keine Faulheit in dieser Lösung. Entschuldigung.
toSet
wird genau das tun, was Sie wollen:
Beispiel
%Vor%Wenn Sie Lust haben, können Sie das wieder in ein iterables konvertieren:
%Vor% Oder, pimpt Iterable
:
Und dann rufe
an %Vor%Erweitern Sie meinen obigen Kommentar, aber ich kann es jetzt nicht testen:
%Vor% Sie haben die Idee, zumindest. Sie würden dies dann auf den Iterator anwenden, den Sie von Ihrem iterablen Element erhalten, und nicht das unnötige Speicherverhalten von Stream
erhalten.
Tags und Links scala collections lazy-evaluation