Java 8 – Convert String to List of Characters Using Stream

Introduction

In Java 8, converting a String to a List<Character> is easy using the Stream API. This approach is useful when you need to manipulate or process individual characters in a string. By converting a string into a stream of characters, you can then collect the characters into a list and perform further operations as needed.

In this guide, we will learn how to convert a String to a List<Character> using Java 8.

Solution Steps

  1. Define the Input String: Create a string that will be converted into a list of characters.
  2. Convert the String to an IntStream: Use the chars() method to convert the string into an IntStream of character codes.
  3. Map Character Codes to Characters: Use mapToObj() to convert the IntStream of character codes to Character objects.
  4. Collect the Stream to a List: Use collect(Collectors.toList()) to collect the characters into a List<Character>.

Java Program

import java.util.List;
import java.util.stream.Collectors;

public class StringToListOfCharacters {
    public static void main(String[] args) {
        // Step 1: Define the input string
        String input = "Hello, World!";

        // Step 2-4: Convert the string to a list of characters using Stream API
        List<Character> charList = input.chars()            // Convert string to IntStream
                                        .mapToObj(c -> (char) c) // Map each int to Character
                                        .collect(Collectors.toList()); // Collect to List

        // Display the result
        System.out.println(charList);
    }
}

Output

[H, e, l, l, o, ,,  , W, o, r, l, d, !]

Explanation

Step 1: Define the Input String

We start by defining a string that we want to convert into a list of characters:

String input = "Hello, World!";

Step 2: Convert the String to an IntStream

The chars() method converts the string into an IntStream of character codes. Each element in this stream represents the Unicode value (integer code) of a character from the string:

IntStream charStream = input.chars();

Step 3: Map Character Codes to Characters

We use mapToObj() to map each integer (character code) to a Character object. This allows us to work with the actual characters instead of their Unicode values:

Stream<Character> characterStream = charStream.mapToObj(c -> (char) c);

Here, c -> (char) c converts each integer back to a char, and the Stream<Character> is created.

Step 4: Collect the Stream to a List

Finally, we collect the stream of characters into a List<Character> using Collectors.toList():

List<Character> charList = characterStream.collect(Collectors.toList());

This step gathers the individual characters into a list, which can be used for further processing or manipulation.

Conclusion

Using Java 8's Stream API, converting a String to a List<Character> is both simple and efficient. By leveraging the chars() method, mapToObj(), and collect(), you can easily process each character in a string and collect them into a list for further operations.

Comments