Kombinieren von Streams von Teilstrings

9

Ich habe den folgenden Code, der über Java DateTimeFormatter Musterkombinationen von "E".."EEEE" und "M".."MMMM" iteriert.

Meine Frage ist, gibt es eine idiomatische (oder einfach "mehr idiomatische") Möglichkeit, Java Streams in diesem Fall zu verwenden?

%Vor%

Ausgabe

%Vor%     
Paul Grime 01.07.2017, 11:01
quelle

4 Antworten

1

Sie verwenden ein IntStream to Laufwerk die Zeichenfolge. Das ist eine Möglichkeit, und hier sind zwei andere Möglichkeiten:

%Vor%

Dies erzeugt rekursiv ein Stream , während der andere Weg wie folgt aussehen würde:

%Vor%

Dies wendet die gegebene Funktion auf das vorherige Ergebnis an. Da es einen unendlichen Stream erstellt, müssen Sie limit verwenden.

Ich habe Ihre main Methode leicht modifiziert, so dass Sie eine map Operation vermeiden:

%Vor%

Ich weiß wirklich nicht, ob die oben genannten Wege mehr oder weniger idiomatisch sind als deine Art, aber wenn du mich fragst, ist der idiomatische Weg, diese Aufgabe zu erledigen, eine verschachtelte Schleife:

%Vor%

Und dies könnte wie folgt in Java 8 übersetzt werden:

%Vor%     
quelle
0

Ich würde die Art ändern, in der Sie wiederholte Läufe eines Zeichens erzeugen: Anstatt die längste Zeichenkette manuell zu konstruieren und dann ihre Präfixe zu iterieren, würde ich Läufe mit Collection.nCopies wie folgt erstellen:

%Vor%

Sie würden dann substrings("EEEE") durch repeatedRuns("E", 1, 4) ersetzen.

Demo.

    
dasblinkenlight 01.07.2017 11:33
quelle
0

Ich weiß nicht, ob das idiomatischer ist, aber ich würde das auf eine einzige Methode anwenden (es könnte nur ich sein ...)

%Vor%     
Eugene 01.07.2017 11:34
quelle
0

Ich würde überhaupt nicht über Teilstrings streamen. Es genügt, über etwas zu streamen, das die sechzehn Kombinationen repräsentiert, und die Formatzeichenfolge in einem Arbeitsgang zu erstellen:

%Vor%

Die Tatsache, dass es sich um vier mal vier Kombinationen handelt, macht die Berechnung für billige Bitarithmetik geeignet, aber im Prinzip ist jede n x m -Kombination durch Streaming von 0 möglich zu n × m und zur Auswahl des Elements i/n und i%n verwenden (z. B. die Operation substring ausführen). Der vorhergehende .map(i -> 15-i) -Schritt kehrt nur die Reihenfolge um, damit sie mit Ihrem ursprünglichen Code übereinstimmt. Sie können es weglassen, wenn die Reihenfolge keine Rolle spielt.

    
Holger 03.07.2017 13:49
quelle

Tags und Links