Mittels Streams aus Strings A B C den String A, B und C machen

LimDul

Top Contributor
Gibt es eine einfache, schlanke und lesbare Möglichkeit, wenn ich einen Stream von Strings habe die zu einem String zu joinen, so dass die einzelnen Elemente mit einem Komma getrennt werden - außer dem letzten Element, wo ein und stehen soll. Sprich bei der Eingabe
[A, B, C, D] soll der String "A, B, C und D" rauskommen.

mittels Collectors.joining geht das leider nicht.

Ich kann das natürlich in eine Liste sammeln und das ausprogrammieren, das ist kein Akt, aber mich fuchst es gerade das mir keine Lösung direkt im Stream einfällt.
 

httpdigest

Top Contributor
Schnell zusammengehacked:
Java:
import static java.util.Arrays.stream;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Stream.of;
import java.util.stream.Stream;

public class StringStreamJoin {
    public static String join(Stream<String> stream) {
        return stream(stream
                .reduce(new String[0], (a, s) -> a.length == 0 ?
                        new String[] {s} : a.length == 1 ?
                        new String[] {a[0], s} :
                        new String[] {a[0] + ", " + a[1], s}, (a, b) -> null))
                .collect(joining(" und "));
    }

    public static void main(String[] args) {
        System.out.println(join(of("a", "b", "c")));
    }
}
 

LimDul

Top Contributor
Bei der Anforderung verständlich bzw. lesbar würde ich die Lösung zwar nicht als ideal sehen, aber immerhin ist es eine Stream-Lösung :)
 
X

Xyz1

Gast
Java:
import java.util.*;
import java.util.stream.*;

public class MyClass {
    public static String getString(String[] sa) {
        return Arrays.stream(sa).limit(sa.length -
1).collect(Collectors.joining(", ")) + " und " +
Arrays.stream(sa).reduce((f,s) -> s).get();
    }

    public static void main(String args[]) {
      System.out.println(getString(new String[] {"Hallo", "du", "da", "!"}));
    }
}
 
K

kneitzel

Gast
Die Lösung von Tobias ist ja gut, aber den letzten Part würde ich nicht mehr als Stream machen. Da geht es ja nur um das letzte Elemente des Arrays. Und das hat man ja im direkten Zugriff und braucht da überhaupt nichts mehr drumherum: sa[sa.length-1].

Dann würde ich den code maximal noch ergänzen um Prüfungen auf die Länge von sa:
sa null oder 0 Elemente: "" zurück geben.
sa hat 1 Element: Das Element zurück geben.
sa hast > 1 Element: Die Stream-Lösung mit eben dem letzten Part nicht über Streams.
 
X

Xyz1

Gast
Danke, aber eigentlich eignen sich Streams nicht ganz so gut für diese Aufgabe. ;) Oder wenn, dann auch mal einen Blick auf googles guava werfen.
 
K

kneitzel

Gast
Danke, aber eigentlich eignen sich Streams nicht ganz so gut für diese Aufgabe. ;) Oder wenn, dann auch mal einen Blick auf googles guava werfen.
Wobei ich das Arrays.stream(sa).limit(sa.length - 1).collect(Collectors.joining(", ")) durchaus verständlich und akzeptabel finde.

Ich denke, bei einem Code Review würde ich das auf jeden Fall direkt durchwinken. Und einen Code ohne Streams kann man natürlich auch bauen, aber da wäre mein aktueller Ansatz wie von httpdigest erwähnt erst einmal die Umwandlung weg von einem Stream um dann das Array zu bearbeiten.

Also ich denke, die Stream Lösung dürfte da sogar die bevorzugte Lösung sein...
 
X

Xyz1

Gast
Also - ich habe nochmal etwas auf SO nachgelesen und für diese Aufgabenstellung(en) sind Streams eher ungeeignet.
java stream all elements except one
java stream last element

Soll heißen, mach es so wie bisher auch.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Objekt in Datei speichern mittels Streams Allgemeine Java-Themen 6
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
N Lottowebsite programmieren mittels Java, HTML,.... Allgemeine Java-Themen 7
W PDFs signieren mittels IText / Lowagie Allgemeine Java-Themen 0
Zrebna Möglichkeit regelmäßige indentation mittels/innerhalb Stringbuilder Allgemeine Java-Themen 14
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
D HTTP Http-Link mittels GUI schreiben Allgemeine Java-Themen 5
B Java Sternchen ausgeben mittels Rekursion Allgemeine Java-Themen 3
J GUI-Einstellungen mittels Preferences Allgemeine Java-Themen 6
Todesbote JFileChooser im Vordergrund (*.jar wird mittels shell_exec in PHP aufgerufen) Allgemeine Java-Themen 1
E Videosequenz mittels Java aus Video schneiden Allgemeine Java-Themen 10
B Ordner öffnen mittels Java in Linux-Umgebung Allgemeine Java-Themen 7
I Webseite auslesen (welche mittels Javascript Inhalt einbindet) Allgemeine Java-Themen 4
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
RySa Variablenname mittels Reflexions rausbekommen (als String) ? Allgemeine Java-Themen 9
U Classpath DLLs mittels System.load() laden: Allgemeine Java-Themen 6
T Wie rufe ich mittels String-Inhalts eine Methode auf? Allgemeine Java-Themen 3
T Exif mittels Java auslesen Allgemeine Java-Themen 14
A Sudoku mittels Backtracking Problem Allgemeine Java-Themen 6
7 Webseiten mittels Java auslesen Allgemeine Java-Themen 7
H Zwei verschiedene Dateien mittels einem Binärstream übertragen? Allgemeine Java-Themen 13
dunhillone Mittels Annotations Methoden "erweitern"? Allgemeine Java-Themen 11
S Mittels eines Applets Bilder generieren die in einer Webseite angezeigt werden..? Allgemeine Java-Themen 8
X String zerlegen mittels regulärem Ausdruck Allgemeine Java-Themen 31
O Programm mittels Java installieren Allgemeine Java-Themen 15
S Array-Sort mittels Binärsuche Allgemeine Java-Themen 2
J Setter mittels invoice aufrufen Allgemeine Java-Themen 4
S Eingabeprüfung mittels Regexp Allgemeine Java-Themen 5
D Einfaches Nutzen von Plugins mittels generischer Methode Allgemeine Java-Themen 3
E Aus mehreren PDFs eines machen, zusammenfügen mittels iText Allgemeine Java-Themen 1
G Graph mittels Punkte erstellen Allgemeine Java-Themen 27
M Problem bei PDF-Anzeige mittels Acrobat Viewer Bean Allgemeine Java-Themen 2
G HTML Code aus String mittels REGEX entfernen Allgemeine Java-Themen 2
spacegaier Performanceproblem beim Einlesen aus Datei mittels Threads Allgemeine Java-Themen 23
G Screenshot mittels robot ausführen Allgemeine Java-Themen 4
B Html Formulare mittels Java automatisch senden Allgemeine Java-Themen 5
E import mittels Eclipse Allgemeine Java-Themen 3
F mittels Collection<A> an A.class kommen? Allgemeine Java-Themen 7
T IF Abfrage + YES_NO Option mittels JOptionPane Allgemeine Java-Themen 3
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
J Tonbalance mittels JMF regeln Allgemeine Java-Themen 3
G Font mittels ClassLoader in .jar wirft NotFoundException Allgemeine Java-Themen 10
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
G eigener logger mittels classe (dynamische logfilename) log4j Allgemeine Java-Themen 15
K Mittels Generics eine Methode verallgemeinern Allgemeine Java-Themen 2
A FTPS bzw. FTP over SSL mittels Java Allgemeine Java-Themen 9
Y komprimierung mittels Huffman-Algorithmus, bit-shifting. Allgemeine Java-Themen 2
G mysql datum umwandeln mittels jsp Allgemeine Java-Themen 10
F Hilfe: Adjazenzmatrix mittels JUnit testen. Allgemeine Java-Themen 2
Natorion Erkennen ob das Programm mittels Jar-Datei oder class . Allgemeine Java-Themen 9
P E-Mails mittels POP3 abrufen Allgemeine Java-Themen 2
S mail von server mittels mailapi löschen Allgemeine Java-Themen 2
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
Z Mit Java 8+ Streams Zeilen nummern zu Zeilen hinzufügen Allgemeine Java-Themen 17
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
Monokuma Lesbarkeit von Streams Allgemeine Java-Themen 6
Monokuma Foreach Schleifen in Streams umändern Allgemeine Java-Themen 23
J Streams Allgemeine Java-Themen 6
LimDul Streams und Exception Allgemeine Java-Themen 8
K Lesbarkeit von Streams Allgemeine Java-Themen 5
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
mihe7 Lesbarkeit von Streams Allgemeine Java-Themen 5
N Streams wann .filtern? Allgemeine Java-Themen 2
A Lambda und Streams verstehen Allgemeine Java-Themen 4
J IO Streams Allgemeine Java-Themen 13
M Wie funktionieren parallele Java Streams? Allgemeine Java-Themen 1
R Collections BiPredicate in Java 8 Streams Allgemeine Java-Themen 7
F Umgehen mit übergebenen Streams Allgemeine Java-Themen 3
hdi Überwachen des err-Streams? Allgemeine Java-Themen 8
N read streams umleiten Allgemeine Java-Themen 2
DEvent GZIP Streams und gzip Allgemeine Java-Themen 2
S Streams zusammenfügen Allgemeine Java-Themen 4
F Double mit Streams aus Datei einlesen Allgemeine Java-Themen 3
C in Streams Allgemeine Java-Themen 4
M Sind Streams asynchron? Allgemeine Java-Themen 2
Saxony DOS Konsole und deren Streams Allgemeine Java-Themen 5
B Probleme mit Streams Allgemeine Java-Themen 5
T Zwei Streams verbinden Allgemeine Java-Themen 3
L Die Wahl des richtigen Streams? Allgemeine Java-Themen 3
G Video Streams mit Servlets Allgemeine Java-Themen 3
P Streams per Mail mit JavaMailAPI versenden Allgemeine Java-Themen 3
A Streams: merkwürdiges Verhalten Allgemeine Java-Themen 7
A Streams - merkwürdiges Verhalten Allgemeine Java-Themen 2
thE_29 Problem mit Streams Allgemeine Java-Themen 6
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
N MySQL mit Strings Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
P Strings: equals vs == Allgemeine Java-Themen 47
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
W Collections Suche Collection, um Strings mit Indizees versehen Allgemeine Java-Themen 47
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
Meeresgott Best Practice Strings auf Inhalte vergleichen Allgemeine Java-Themen 1
N DNA Strings vergleichen Allgemeine Java-Themen 1
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
K Vergleich von Strings von Objekten Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben