Wie man bestimmte Gegenstände von einem Scala Iterable erhält, Faulheit beibehalten

8

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:

%Vor%

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.

    
Dan Gravell 24.04.2013, 16:15
quelle

5 Antworten

10

Sie können die Methode distinct für Stream . Zum Beispiel, wenn Sie Iterable haben:

%Vor%

Sie können schreiben:

%Vor%

Wir können sagen, dass alles angemessen faul ist, da der Stream unendlich ist.

    
Travis Brown 24.04.2013, 16:31
quelle
6

UPDATE Fragen sorgfältig zu lesen ist gut. Keine Faulheit in dieser Lösung. Entschuldigung.

toSet wird genau das tun, was Sie wollen:

  1. Speichere iterierte Elemente in einer Sammlung (nicht was du willst, sondern benötigt)
  2. Löschen / Ersetzen von Duplikaten

Beispiel

%Vor%

Wenn Sie Lust haben, können Sie das wieder in ein iterables konvertieren:

%Vor%

Oder, pimpt Iterable :

%Vor%

Und dann rufe

an %Vor%     
gzm0 24.04.2013 16:28
quelle
1

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.

    
Mysterious Dan 24.04.2013 20:37
quelle
1

Hier ist der Code, der .disctinct method zu Iterator hinzufügt.

%Vor%

Beachten Sie, dass der ursprüngliche Iterator, wie bei Iteratoren üblich, nach dem Aufruf von .distinct nicht gültig ist.

    
Rok Kralj 06.02.2015 19:49
quelle
-1

Das sollte den Job machen (aber ich hasse es):

%Vor%     
gzm0 24.04.2013 16:43
quelle