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