ホームページ >Java >&#&チュートリアル >Java ストリームをマスターする: 開発者のための完全ガイド
Java 8 で導入された Java Streams は、この言語への最も強力な追加機能の 1 つです。これらにより、コレクションやシーケンスに対する関数型の操作が可能になり、Java でのデータ処理へのアプローチ方法が変わります。ストリームは、フィルタリング、マッピング、データ収集などのタスクを簡素化すると同時に、パフォーマンス向上のための並列操作もサポートします。この投稿では、Streams の基礎を説明し、Streams がサポートする操作の種類について説明し、この重要な機能を最大限に活用するのに役立つ例を示します。
目次
1. What is Streams and why we need it? 2. Types of Streams: Intermediate vs. Terminal 3. Creating Streams in Java 4. Intermediate Stream Operations 5. Terminal Stream Operations 6. Using Streams with Lambdas 7. Conclusion
Java のストリームは、データのコレクションを処理する強力な方法を提供します。これらを使用すると、基礎となるデータを変更することなく、コレクションの要素に対してフィルタリングや変換などの機能的な操作を実行できます。ストリームは、開発者がデータ処理のより高いレベルの抽象化を提供し、それをどのように達成するかではなく、何を達成したいかに集中するのに役立ちます。
ストリームは、Java の表現力を高め、定型コードを削減するために、ラムダ式や関数型インターフェイスとともに Java 8 に導入されました。ストリームを組み込むことにより、Java は関数型プログラミングのパラダイムを受け入れ始め、よりクリーンで簡潔なコードを可能にしました。
ストリームの主な利点
ストリームは主に 2 つのタイプに分類されます:
例:
List<String> names = List.of("Alice", "Bob", "Charlie", "David"); // Intermediate (lazy) operations: filter and map Stream<String> stream = names.stream() .filter(name -> name.startsWith("A")) .map(String::toUpperCase); // Terminal operation: collect List<String> filteredNames = stream.collect(Collectors.toList()); System.out.println(filteredNames); // Output: [ALICE]
この例では、フィルターとマップは中間操作であり、ターミナル操作の収集が呼び出されるまで実行されません。
Java にはストリームを作成するいくつかの方法が用意されており、データの処理を簡単に開始できます。
ストリームを作成する最も一般的な方法は、List、Set、Map などのコレクションから作成することです。
1. What is Streams and why we need it? 2. Types of Streams: Intermediate vs. Terminal 3. Creating Streams in Java 4. Intermediate Stream Operations 5. Terminal Stream Operations 6. Using Streams with Lambdas 7. Conclusion
List<String> names = List.of("Alice", "Bob", "Charlie", "David"); // Intermediate (lazy) operations: filter and map Stream<String> stream = names.stream() .filter(name -> name.startsWith("A")) .map(String::toUpperCase); // Terminal operation: collect List<String> filteredNames = stream.collect(Collectors.toList()); System.out.println(filteredNames); // Output: [ALICE]
List<String> names = List.of("Alice", "Bob", "Charlie"); Stream<String> nameStream = names.stream();
Java では、Stream.generate と Stream.iterate を使用して無限ストリームを作成できます。
String[] namesArray = {"Alice", "Bob", "Charlie"}; Stream<String> nameStream = Arrays.stream(namesArray);
中間操作は新しいストリームを返し、遅延します。これは、端末操作が呼び出された場合にのみ実行されることを意味します。
条件に基づいて要素をフィルタリングします。
Stream<String> stream = Stream.of("Alice", "Bob", "Charlie");
要素をある型から別の型に変換します。
Stream<Double> randomNumbers = Stream.generate(Math::random).limit(5); Stream<Integer> counting = Stream.iterate(0, n -> n + 1).limit(5);
自然な順序で、またはコンパレータに基づいて要素を並べ替えます。
List<Integer> numbers = List.of(1, 2, 3, 4, 5); List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList());
各要素に対してアクションを実行します。これはデバッグに役立つことがよくあります。
List<String> names = List.of("Alice", "Bob"); List<Integer> nameLengths = names.stream() .map(String::length) .collect(Collectors.toList());
端末操作は最後に実行され、実際のデータ処理がトリガーされて最終結果が返されます。
ストリーム内の各要素に対してアクションを実行します。
List<String> names = List.of("Bob", "Alice", "Charlie"); List<String> sortedNames = names.stream() .sorted() .collect(Collectors.toList());
ストリームの要素をコレクション、リスト、セット、またはその他のデータ構造に収集します。
List<String> names = List.of("Alice", "Bob"); names.stream() .peek(name -> System.out.println("Processing " + name)) .collect(Collectors.toList());
ストリーム内の要素の数をカウントします。
List<String> names = List.of("Alice", "Bob"); names.stream().forEach(System.out::println);
要素が指定された条件に一致するか、すべて一致するか、または一致しないかをチェックします。
List<String> names = List.of("Alice", "Bob"); Set<String> nameSet = names.stream().collect(Collectors.toSet());
ストリームの最初の要素または任意の要素を説明するオプションを返します。
List<String> names = List.of("Alice", "Bob"); long count = names.stream().count();
ストリームとラムダ式は密接に連携します。ストリームは関数型インターフェイスに基づいているため、ラムダとシームレスに連携し、表現力豊かで簡潔なデータ処理が可能になります。
たとえば、名前のリストをフィルタリングして「A」で始まる名前を検索し、それを大文字に変換します。
List<String> names = List.of("Alice", "Bob", "Charlie"); boolean hasAlice = names.stream().anyMatch(name -> name.equals("Alice"));
この例では:
Java Streams は Java に関数型プログラミング機能をもたらし、表現力豊かで簡潔なデータ操作を可能にします。中間操作と末端操作の違い、およびストリームを効果的に作成および使用する方法を理解することで、コードの可読性と保守性を大幅に向上させることができます。ストリームとラムダをワークフローに統合して、よりクリーンで効率的な Java アプリケーションを作成します。
ストリーミングをお楽しみください!
以上がJava ストリームをマスターする: 開発者のための完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。