Javaパラレルストリーム
並列ストリームは、期待される出力を生成するためのさまざまな機能をサポートするオブジェクトの並列フローです。パラレル ストリームは、ユーザーがコレクション、配列、Java 入力および出力 API から入力を入力できるデータ構造ではありません。並列ストリームは機能の実際の動作を変更しませんが、適用されたフィルター (パイプライン) に基づいて出力を提供できます。並列ストリームは、Java 8th バージョン以降に登場する Java 関数型プログラミングの一部です。並列ストリームは、ラムダ式のさらなる利点です。
広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
Java で並列ストリームを実行する方法
- ParallelStream() メソッド
- Parallel() メソッド
Java での Parallel Stream はどのように機能しますか?
これは、コレクションに適用されたParallelStream() メソッドまたはストリームに適用されたParallel() メソッドに基づいています。
構文:
List<Object> list=new ArrayList<Object>(); list.parallelStream();
説明:
- まず、配列リストのコレクションを作成します。
- 配列コレクションに paralleStream() メソッドが適用されました。
- ParallelStream() はコレクションにのみ適用されると結論付けます。
構文:
IntStream inStream=IntStream.rangeClosed(initialValue, finalValue); inStream.parallel();
説明:
- まず、IntStream ストリームを作成します。
- オンストリームでは、Parallel() メソッドが適用されました。
- Parallel() はストリームにのみ適用されると結論付けます。
例
以下に例を示します:
例 #1
ParallelStream() が Capital Alphabets に適用されました。
コード:
import java.util.ArrayList; import java.util.List; public class ParalleStreamOnAlphabets { public static void main(String[] args) { System.out.println("Capital Alphabets before Parallel Stream"); // creating array list for adding alphabets List<String> capitalAlphabets = new ArrayList<>(); int ascilCode = 65; // Ascii value of A=65 and Z=90 while (ascilCode <= 90) { // iterating ascii values char alphabets = (char) ascilCode; // converting integer to character capitalAlphabets.add(String.valueOf(alphabets)); // adding Capital alphabets to list ascilCode++;// pre increment operator } // displaying initial Alphabets capitalAlphabets.stream().forEach(System.out::println); System.out.println("Capital Alphabets after Parallel Stream"); // inserting all elements to another list to apply parallelStream // operation without modifying previous array list List<String> captatlAlphabetsParalleStream = capitalAlphabets; //applying parallelStream() on new array list captatlAlphabetsParalleStream.parallelStream().forEach(System.out::println); } }
出力:
説明:
- 並列ストリームを適用する前の出力をご覧のとおり、順次出力が得られています。
- しかし、並列ストリームを適用すると、出力はジグザグ形式で並列に出力されます。
例 #2
ParallelStream() は偶数に適用されます。
コード:
import java.util.ArrayList; import java.util.List; public class ParallelStreamEvenNumbers { public static void main(String[] args) { System.out.println("Even Numbers before Parallel Stream"); // creating array list for adding alphabets List<Integer> evenNumbers = new ArrayList<Integer>(); for (int number=0;number<=10;number++) { // iterating numbers if(number%2==0) //if number even go inside the condition evenNumbers.add(number); //added all even numbers } // displaying initial even numbers evenNumbers.stream().forEach(System.out::println); System.out.println("Even Numbers before Parallel Stream"); // inserting all elements to another list to apply parallelStream // operation without modifying previous array list List<Integer> captatlAlphabetsParalleStream = evenNumbers; // applying parallelStream() on new array list captatlAlphabetsParalleStream.parallelStream().forEach(System.out::println); } }
出力:
説明:
- 並列ストリームを適用する前の出力をご覧のとおり、順次出力が得られています。
- しかし、並列ストリームを適用すると、出力はジグザグ形式で並列に出力されます。
例 #3
ParallelStream() はコース料金に適用されます。
コード:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.stream.Stream; public class ParallelStreamCourseFee { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("How many number would you like to enter=>"); int inputNumber = scanner.nextInt(); // asking user for number count List<Courses> courseWithFee = new ArrayList<Courses>();// creating array String coursename = ""; int courseFee = 0; for (int i = 0; i < inputNumber; i++) { coursename = scanner.next();//taking course name input courseFee = scanner.nextInt();//taking course fee input courseWithFee.add(new Courses(coursename, courseFee));//adding course name and fee } //get the stream list which courses fee is >1000 Stream<Courses> list = courseWithFee.parallelStream().filter(e -> e.getCourseFee() > 1000); //displaying courses count which is fee is >1000 System.out.println("Course Fee above 1000 is=> " + list.count()); scanner.close(); } } //courses class class Courses { String course; int courseFee; public Courses(String course, int courseFee) { this.course = course; this.courseFee = courseFee; } public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } public int getCourseFee() { return courseFee; } public void setCourseFee(int courseFee) { this.courseFee = courseFee; } }
出力:
説明:
- 出力でわかるように、コース料金が 1000 を超えていることをカウントする必要があります。
例 #4
Parallel() は奇数カウントに適用されます。
コード:
import java.util.stream.IntStream; public class Main { public static void main(String[] args) { // Taking InStream with range of 1 to 1000 //On rane() applied parallel method //On parallel() method applied filter to decide whether given number odd or not //after getting odd numbers we simply displaying odd numnbers count int oddNumberCount = (int) IntStream.range(1, 1000).parallel().filter(value -> oddOrNot(value)).count(); //displaying odd number count System.out.println("Count of Odd Number from 1-1000 range is => " + oddNumberCount); } public static boolean oddOrNot(int inputNumber) { //checking first number >0 and then checking range from 1 tom 1000 //next checking odd number or not within nonMatch method return inputNumber > 0 && IntStream.rangeClosed(1, inputNumber).noneMatch(temp -> inputNumber % 2 == 0); } }
出力:
説明:
- ご覧のとおり、並列メソッドはストリームにのみ適用できます。
例 #5
Parallel() が素数に適用されました。
コード:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.function.IntPredicate; import java.util.stream.Collectors; import java.util.stream.IntStream; public class ParallelPrimeNumber { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("How many number would you like to enter=>"); int inputNumber = scanner.nextInt(); //asking user for number count System.out.print("Enter your numbers =>"); List<Integer> listNumbers = new ArrayList<Integer>();//creating array list for (int i = 0; i < inputNumber; i++) { listNumbers.add(scanner.nextInt());//adding user elements into an array } //checking the entered numbers are prime or not //filter(ParallelCount::isPrime) ParallelCount is class name and primeNumberOrNot method List<Integer> primeOut = listNumbers.stream().filter(ParallelPrimeNumber::primeNumberOrNot).collect(Collectors.toList()); System.out.print("Prime number set from your entered numbers is/are=>"); for (Integer i : primeOut) { System.out.print(i+" ");//displaying prime numbers } scanner.close(); } public static boolean primeNumberOrNot(int i) { //IntPredicate checks the number whether even, odd, prime etc. based on condition IntPredicate trueOrNot = index -> i % index == 0; //return true if entered number is prime else returns false return i > 1 && IntStream.range(2, i).noneMatch(trueOrNot); } }
出力:
説明:
- 上記のコードでわかるように、ストリームの並列メソッドでも素数、偶数、奇数などのロジックも実行されます。
Java Parallel Stream の利点と応用
以下に利点と用途を示します:
メリット
- 通常のフィルターよりも効率的に CPU 使用率を改善します。
- 並列ストリームは一度に複数のデータを処理します。
アプリケーション
- 集計機能で使用されます。
- より多くのサイズのコレクション フレームワークで使用されます。
- 順次ストリームで使用されます。
結論
これは、コレクションのParallelStream()メソッドとストリームのParallel()メソッドで実現されます。並列ストリームは処理時間を短縮するため、主に大きなコレクション データを使用しました。
以上がJavaパラレルストリームの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









