私はすでにthis関連の記事を読んでいます。ストリング操作に関しては、ストリームは膨大な量の儀式を引き付けるようです。文字列を文字列として解析したい場合は、最初にIntStream
に変換してObject
にマップし、int
をchar
にキャストし、最終的にchar
をString
にキャストし、それを返す。Java 8ストリームは、文字と文字列で使用されることはありませんか?
人々は、命令型プログラミングには式のオーバーヘッドがあると言います。私が完全に間違っていたら私を修正してください。私の意図は、Javaストリームをよく理解するためではなく、Javaストリームをより良く理解することです。
// 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);
単に 'char'を' int'として扱うことができます。しかし、この問題は実際にJavaのプリミティブ型の問題全体の遺産である。 –
もし私がそれを行うなら、代わりにintを取るためにcharパラメータを使って各メソッドを変更する必要があります。これは私の意見ではコード臭です。プリミティブに関するどの問題を指していますか?リンクがありますか? – AdHominem
ちょうどそれはGoogleです。プリミティブでジェネリックを使用することはできません。彼らは 'Stream'、 'IntSteam' **、**' LongStream'に同じコードを書く必要がありました。彼らは 'CharStream'を作成しないことを選択しました。これは近代的なJavaを後押しするアンカーです。切断可能なものではありません。 –