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にあります。