>  기사  >  Java  >  자바 병렬 스트림

자바 병렬 스트림

WBOY
WBOY원래의
2024-08-30 16:11:08616검색

병렬 스트림은 예상되는 출력을 생성하도록 의도될 수 있는 다양한 기능을 지원하는 객체의 병렬 흐름입니다. 병렬 스트림은 사용자가 컬렉션, 배열, Java 입력 및 출력 API에서 입력을 입력할 수 있는 데이터 구조가 아닙니다. 병렬 스트림은 기능의 실제 동작을 변경하지 않지만 적용된 필터(파이프라인)를 기반으로 출력을 제공할 수 있습니다. 병렬 스트림은 Java 8th 버전 이후에 등장한 Java 기능 프로그래밍의 일부입니다. 병렬 스트림은 람다 표현식에 추가적인 이점을 제공합니다.

광고 이 카테고리에서 인기 있는 강좌 JAVA MASTERY - 전문 분야 | 78 코스 시리즈 | 15가지 모의고사

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

Java에서 병렬 스트림을 수행하는 방법

  • parallelStream() 메서드
  • 병렬() 메서드

Java에서 병렬 스트림은 어떻게 작동하나요?

콜렉션에 적용된 ParallelStream() 메소드나 스트림에 적용된 Parallel() 메소드를 기반으로 합니다.

구문:

List<Object> list=new ArrayList<Object>();
list.parallelStream();

설명:

  • 먼저 배열 목록 컬렉션을 만듭니다.
  • 배열 컬렉션에 paralleStream() 메서드를 적용했습니다.
  • parallelStream()은 컬렉션에만 적용된다는 결론을 내렸습니다.

구문:

IntStream inStream=IntStream.rangeClosed(initialValue, finalValue);
inStream.parallel();

설명:

  • 먼저 IntStream 스트림을 생성합니다.
  • On Stream에 병렬() 메소드를 적용했습니다.
  • parallel()은 스트림에만 적용된다고 결론을 내렸습니다.

다음은 예시입니다.

예시 #1

대문자에 parallelStream()을 적용했습니다.

코드:

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

출력:

자바 병렬 스트림

설명:

  • 위 코드에서 볼 수 있듯이 스트림의 병렬 방식도 소수, 짝수, 홀수 등의 논리를 수행합니다.

자바 병렬 스트림의 장점과 응용

다음은 장점과 적용 분야입니다.

장점

  • 일반 필터보다 효율적으로 CPU 활용도를 향상시킵니다.
  • 병렬 스트림은 한 번에 여러 데이터를 처리합니다.

애플리케이션

  • 집계 기능과 함께 사용됩니다.
  • 더 큰 규모의 컬렉션 프레임워크와 함께 사용됩니다.
  • 순차 스트림과 함께 사용됩니다.

결론

컬렉션에서는 ParallelStream() 메서드를 사용하고 스트림에서는 Parallel() 메서드를 사용하여 구현됩니다. 병렬 스트림은 처리 시간을 줄여주므로 대용량 수집 데이터를 주로 사용합니다.

위 내용은 자바 병렬 스트림의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Java로 마무리다음 기사:Java로 마무리