Ich lese bereits this verwandten Post. Wenn es um String-Operationen geht, scheinen Streams eine große Menge an Zeremonien anzulocken. Wenn Sie einen String als Zeichenstrom analysieren möchten, für den Sie möglicherweise einige Operationen ausführen möchten, müssen Sie diese zuerst in IntStream
konvertieren, dann auf Object
und anschließend auf umwandeln und schließlich die char
in String
umwandeln dann gib es zurück.Sind Java 8 Streams nicht dazu gedacht, mit Zeichen und Strings verwendet zu werden?
Und Leute sagen, Imperativ Stil Programmierung hat eine Zeremonie Overhead. Bitte korrigieren Sie mich, wenn ich das komplett falsch mache. Ich beabsichtige nicht, herumzuspielen, sondern Java-Streams besser zu verstehen, weil ich sie im Allgemeinen schätze.
// Simple method which encrypts all chars in a string
String input = "Hel!lo";
String result = input.chars() // Need to convert into an IntStream
.mapToObj(e -> Character.toUpperCase((char) e)) // Need to map to Object (!) and then cast to char
.map(CryptoMath::encryptChar) // Calling the encryption
.map(String::valueOf) // Need to cast to String again...
.collect(joining("")); // Finally done
System.out.println(result);
Sie können das 'char' einfach als' int' behandeln. Aber dieses Problem ist wirklich ein Vermächtnis des ganzen Java primitiven Typenproblems. –
Nun, wenn ich das tue, muss ich jede Methode mit char-Parametern ändern, um stattdessen zu nehmen, was meiner Meinung nach Code-Geruch ist. Auf welches Problem bezogen auf Primitive beziehen Sie sich? Sie haben einen Link? – AdHominem
Nur Google es. Sie können Generics mit Primitiven nicht verwenden. Sie mussten den gleichen Code für "Stream", "IntSteam" ** und "LongStream" schreiben. Sie haben sich entschieden, keinen 'CharStream' zu erstellen. Dies ist ein Anker, der modernes Java zurückhält; und nicht einer, der abgeschnitten werden kann. –