文字列の文字をストリームとして処理
文字列の文字をストリームパイプラインとして処理する。
コード比較
✕ Java 8
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (Character.isDigit(c)) {
process(c);
}
}
✓ Java 9+
str.chars()
.filter(Character::isDigit)
.forEach(c -> process((char) c));
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
チェーン可能
文字ストリームにfilter・map・collectが使えます。
宣言的
ループの方法ではなく、何をするかを記述します。
Unicode対応
codePoints()は絵文字や補助文字を正しく処理します。
旧来のアプローチ
手動ループ
モダンなアプローチ
chars()ストリーム
JDKバージョン
9
難易度
初級
JDKサポート
文字列の文字をストリームとして処理
利用可能
JDK 8以降(JDK 9以降で改善)、利用可能
仕組み
String.chars()は文字値のIntStreamを返し、関数型処理が可能になります。Unicode対応が必要な場合はcodePoints()が補助文字を正しく処理します。
関連ドキュメント