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 |