Java でリストをマップに変換する

Rupam Yadav 2023年10月12日
  1. Java 8 の findFirst() ストリームメソッド
  2. Java 8 の findAny() ストリームメソッド
Java でリストをマップに変換する

java.util.stream API は Java 8 で導入されました。オブジェクトのコレクションを処理するために使用されます。配列やコレクションなどのさまざまなソースでストリームを作成できます。

ここでは、findFirst() および findAny() ストリームメソッドとそれらをいつ使用するかを詳しく見ていきます。

Java 8 の findFirst() ストリームメソッド

ストリームは元のデータを変更しません。パイプラインメソッドを使用してストリームの要素を評価します。

Stream API メソッド findFirst() はターミナル操作です。終了して結果を返します。シーケンスの最初の要素が必要な場合は、findfFirst() メソッドを使用します。

このメソッドは、ストリームの最初の要素を記述する Optional<T> を返します。ここで、TString であるタイプです。

Optional はコンテナオブジェクトです。null 以外の値を保持する場合と保持しない場合があります。ストリームが空の場合、返される Optional は空になります。

別のコンテキストで findFirst() メソッドを使用して、それぞれ String および Integer タイプのデータを保持する fruits および numbers のリストを作成します。リスト要素のストリームを返すリストで .stream() を呼び出します。

そのリストの最初の要素が必要なので、その上で findFirst() メソッドを呼び出します。Optional を返します。これは first に保存されます。

Optional インスタンスに値が含まれているかどうか、または boolean を返す isPresent() メソッドを使用していないかどうかを確認します。true が返された場合、値があり、first.get() を使用して取得し、出力します。Optional インスタンスが空の場合、値は出力されません。

2 番目のステートメント numbers.stream().filter((x)->x>5).findFirst() は、2 番目の Optional インスタンス firstN を提供します。まず、filter() メソッドを適用して、指定された述語に基づいてフィルター処理されたストリームを返します。

このメソッドは、5 より大きい値を持つ要素の新しいストリームを返します。そのストリームから、最初の要素を取得する必要があります。この場合、numbers のストリームで 5 より大きい値を持つ最初の要素は 8 のみです。

import java.util.List;
import java.util.Optional;

public class StreamTest {
  public static void main(String[] args) {
    List<String> fruits = List.of("Apple", "Grapes", "Orange", "Kiwi");
    List<Integer> numbers = List.of(4, 5, 3, 8);

    Optional<String> first = fruits.stream().findFirst();
    if (first.isPresent()) {
      String string = first.get();
      System.out.println("First String is : " + string);
    } else {
      System.out.println("No value");
    }
    Optional<Integer> firstN = numbers.stream().filter((x) -> x > 5).findFirst();
    if (firstN.isPresent()) {
      System.out.println("First Number is : " + firstN.get());
    } else {
      System.out.println("No value");
    }
  }
}

出力:

First String is : Apple
First Number is : 8

Java 8 の findAny() ストリームメソッド

findAny() メソッドは、ストリームの任意の要素を記述する Optional インスタンスを返します。以下のプログラムには、Integer 型の要素のリストがあります。

リストからストリームを作成し、そのストリームをフィルタリングして、5 未満の値を持つ数値を返します。次に、findAny() を呼び出して、フィルタリングされたストリームから任意の番号を取得します。

ほとんどの場合、最初の要素を返します。Optional インスタンス firstN が空でない場合、get() メソッドを使用して取得したインスタンス値を出力します。

import java.util.List;
import java.util.Optional;

public class StreamTest {
  public static void main(String[] args) {
    List<Integer> numbers = List.of(4, 5, 2, 8);
    Optional<Integer> firstN = numbers.stream().filter((x) -> x < 5).findAny();
    if (firstN.isPresent()) {
      System.out.println("Any First Number less then 5 is : " + firstN.get());
    } else {
      System.out.println("No value");
    }
  }
}

出力:

Any First Number less then 5 is : 4

シーケンシャルストリームとパラレルストリームの両方の場合、メソッド findAny() および findFirst() の動作は変更されないことに注意してください。非並列ストリームの場合の findAny() の動作は保証されません。

著者: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

関連記事 - Java Stream