文字列を文字ストリームに変換する
1. 概要
Java 8では、シーケンスを処理するための機能的な操作を備えたStreamAPIが導入されました。 それについてもっと読みたい場合は、have a look at this article.
この簡単な記事では、Stringを1文字のStreamに変換する方法を説明します。
2. chars()を使用した変換
String APIには、StringオブジェクトからStreamのインスタンスを取得できる新しいメソッドchars()があります。 この単純なAPIは、入力StringからIntStreamのインスタンスを返します。
簡単に言えば、IntStreamには、Stringオブジェクトの文字の整数表現が含まれています。
String testString = "String";
IntStream intStream = testString.chars();
文字をCharacterに相当するものに変換せずに、文字の整数表現を操作することができます。 これにより、各整数をCharacterオブジェクトにボックス化する必要がなくなるため、パフォーマンスがわずかに向上する可能性があります。
ただし、読み取り用の文字を表示する場合は、整数を人間にわかりやすいCharacter形式に変換する必要があります。
Stream characterStream = testString.chars()
.mapToObj(c -> (char) c);
3. codePoints()を使用した変換
または、codePoints()メソッドを使用してString.からIntStreamのインスタンスを取得することもできます。このAPIを使用する利点は、Unicode補助文字を効果的に処理できることです。
補助文字はUnicodeサロゲートペアで表され、単一のコードポイントにマージされます。 これにより、Unicodeシンボルを正しく処理(および表示)できます。
IntStream intStream1 = testString.codePoints();
返されたIntStreamをStream<Character>にマップして、ユーザーに表示する必要があります。
Stream characterStream2
= testString.codePoints().mapToObj(c -> (char) c);
4. 単一文字StringsのStreamへの変換
これまでのところ、Streamの文字を取得することができました。代わりに、単一文字StringsのStreamが必要な場合はどうなりますか?
記事の前半で指定したように、codePoints()またはchars()メソッドを使用して、Stream<String>にマップできるIntStreamのインスタンスを取得します。
マッピングプロセスでは、まず整数値をそれぞれの対応する文字に変換します。
次に、String.valueOf()またはCharacter.toString()を使用して、文字をStringオブジェクトに変換できます。
Stream stringStream = testString.codePoints()
.mapToObj(c -> String.valueOf((char) c));
5. 結論
このクイックチュートリアルでは、codePoints()またはchars()メソッドを呼び出すことにより、StringオブジェクトからCharacterのストリームを取得する方法を学習します。
これにより、Stream APIを最大限に活用して、文字を便利かつ効果的に操作できます。
いつものように、コードスニペットはover on GitHubで見つけることができます。