JavaのStream APIはコレクションや配列などのデータを処理するための便利なメソッドを提供しています。その中で、Optionalは値が存在するかどうか不確かな場合に使用されるクラスです。では、Stream APIとOptionalを組み合わせてどのように利用できるでしょうか?
フィルタリングと値の取得
List<String> words = Arrays.asList("apple", "banana", "cherry");
Optional<String> firstWordStartingWithB = words.stream()
.filter(word -> word.startsWith("b"))
.findFirst();
String result = firstWordStartingWithB.orElse("No word found");
System.out.println(result);
この例では、リストから”B”で始まる最初の単語を見つけています。もし見つからない場合は、デフォルト値として”No word found”を使っています。
マッピングと変換
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
String concatenatedNames = names.stream()
.reduce((name1, name2) -> name1 + ", " + name2)
.orElse("No names found");
System.out.println(concatenatedNames);
この例では、リストの名前をカンマで区切った1つの文字列に変換しています。もし名前が一つもない場合は、デフォルト値として”No names found”を使っています。
条件に基づく処理
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.filter(number -> number % 2 == 0)
.mapToInt(Integer::intValue)
.sum();
System.out.println("Sum of even numbers: " + sum);
この例では、リストから偶数だけを抽出し、それらの合計を計算しています。合計が0の場合、デフォルト値として”No even numbers found”を使っています。
JavaのStream APIとOptionalを組み合わせることで、より柔軟で安全なコードを書くことができます。特にデータが存在しない可能性がある場合に、Optionalを活用することでエレガントなソリューションを実現できます。