ホームページ >Java >&#&チュートリアル >Javaパラレルストリーム

Javaパラレルストリーム

WBOY
WBOYオリジナル
2024-08-30 16:11:08661ブラウズ

並列ストリームは、期待される出力を生成するためのさまざまな機能をサポートするオブジェクトの並列フローです。パラレル ストリームは、ユーザーがコレクション、配列、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);
}
}

出力:

Javaパラレルストリーム

Javaパラレルストリーム

説明:

  • 並列ストリームを適用する前の出力をご覧のとおり、順次出力が得られています。
  • しかし、並列ストリームを適用すると、出力はジグザグ形式で並列に出力されます。

例 #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);
}
}

出力:

Javaパラレルストリーム

説明:

  • 並列ストリームを適用する前の出力をご覧のとおり、順次出力が得られています。
  • しかし、並列ストリームを適用すると、出力はジグザグ形式で並列に出力されます。

例 #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;
}
}

出力:

Javaパラレルストリーム

説明:

  • 出力でわかるように、コース料金が 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);
}
}

出力:

Javaパラレルストリーム

説明:

  • ご覧のとおり、並列メソッドはストリームにのみ適用できます。

例 #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パラレルストリーム

説明:

  • 上記のコードでわかるように、ストリームの並列メソッドでも素数、偶数、奇数などのロジックも実行されます。

Java Parallel Stream の利点と応用

以下に利点と用途を示します:

メリット

  • 通常のフィルターよりも効率的に CPU 使用率を改善します。
  • 並列ストリームは一度に複数のデータを処理します。

アプリケーション

  • 集計機能で使用されます。
  • より多くのサイズのコレクション フレームワークで使用されます。
  • 順次ストリームで使用されます。

結論

これは、コレクションのParallelStream()メソッドとストリームのParallel()メソッドで実現されます。並列ストリームは処理時間を短縮するため、主に大きなコレクション データを使用しました。

以上がJavaパラレルストリームの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。