JAVA

스트림

연93 2022. 10. 29. 13:26
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;

public class IteratorVsStreamExample {

	public static void main(String[] args) {
		
		List<String> list = Arrays.asList("홍길동", "김동연", "감자바");
		
		/*요소를 순차적으로 접근하는 방법*/
		
		//1)Iterator 이용. 자바7
		Iterator<String> iterator = list.iterator();
		while(iterator.hasNext()) {
			String name = iterator.next();
			System.out.println(name);
		}
		
		System.out.println();
		
		//2)스트림 이용. 자바8추가.   컬렉션 또는 배열에서 stream()메소드 이용. 람다식으로 요소처리. 내부반복자를 사용 병렬처리 쉽다.
		
		Stream<String> stream = list.stream();
		//Consumer함수적 인터페이스 : 객체소비목적. 람다식제공.
		// 매개변수는 제공하고, 리턴값이 없다.
		stream.forEach( name -> System.out.println(name));
		
		
	}

}

 

람다식으로 요소 처리 코드를 제공한다

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class LambdaExpressionsExample {

	public static void main(String[] args) {
		List<Student> list = Arrays.asList(
			new Student("홍길동", 90),
			new Student("김동연", 92)
		);
		
		// 위의 구문을 컬렉션 문법으로 처리.
		/*
		List<Student> list2 = new ArrayList<Student>();
		list2.add(new Student("홍길동", 90));
		list2.add(new Student("김동연", 92));
		*/
		
		Stream<Student> stream = list.stream();
		stream.forEach(s -> {
			String name = s.getName();
			int score = s.getScore();
			System.out.println(name + "-" + score);
		});

	}

}

순차처리와 병렬처리

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class ParallelExample {

	public static void main(String[] args) {
		//스트림 병렬처리방식을 확인하는 예제 
		List<String> list = Arrays.asList("홍길동", "신용권", "감자바", "람다식", "박병렬");
		
		//순차처리
		Stream<String> stream = list.stream();
		// Consumer함수적인터페이스가 매개변수는 제공하고 리턴이 없으므로, 매개변수를 제공하고, print(매개변수) 로 되어있으면, 
		// 메소드참조구문에서는 매개변수 생략가능
		stream.forEach( ParallelExample :: print); 
	
		
		System.out.println();
		
		//병렬처리 : 내부적으로 제공하는 멀티스레드로 동작함.
		Stream<String> parallelStream = list.parallelStream();
		parallelStream.forEach(ParallelExample :: print);
		

	}
	
	
	
	public static void print(String str) {
		// Thread.currentThread().getName() 현재 실행스레드의 이름확인
		System.out.println(str + " : " + Thread.currentThread().getName());
	}

}

 

'JAVA' 카테고리의 다른 글

스트림 중간 처리,최종 처리  (0) 2022.10.29
중첩클래스와 중첩 인터페이스  (0) 2022.10.15
람다식  (0) 2022.10.12
제네릭 타입의 상속과 구현  (0) 2022.10.12
제네릭 와일드카드 타입  (0) 2022.10.12