다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것
Stream 은 데이터 소스로 부터 데이트를 읽기만 할 뿐 변경하지 않는다.
일회성으로 사용 가능하며 다시 필요할 경우 스트림을 생성해야 한다.
데이터 소스 → Stream → 중간 연산 → 최종연산 (결과)
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, ... );
list.stream(). // 스트림 생성
.distinct().limit(3).sorted() // 중간연산 (3가지 작업 실행)
.forEach(System.out :: println) // 최종연산 (한번만 실행할 수 있음)
Collection 을 stream 으로 변환 하는 기능
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> strm = list.stream();
특정 요소를 Stream 으로 생성하는 기능
Stream<Integer> strm = Stream.of(1, 2, 3, 4);
기본형 data type 을 사용할 수 없고 꼭 참조형 data type 만 사용해야 하는 stream 의 특성상 타입변환을 해서 사용해야하는데,
이 때 기본형 스트림을 사용하면 코드의 효율과 가독성을 높힐 수 있다.
IntStream intstrm = IntStream.of(1, 2, 3, 4 );
연산결과가 스트림인 연산 (반복적으로 적용가능)
Stream 의 요소중 중복되는 값을 제거하는 기능
List<Integer> list = Arrays.asList(1, 2, 2, 2, 3);
list.stream().distinct().forEach(System.out :: print);
// 123
stream 의 index 를 조건을 만들어 필터링 할 수 있는 기능
List<String> list = Arrays.asList(
"banana" , "apple", "are" , "cat"
);
List <String> a = list.stream()
// startsWith : 앞글자가 "a" 인경우만 true
.filter(name -> name.startsWith("a"))
.collect(Collectors.toList());
System.out.println(a); // [apple, are]
stream 의 index 총 합을 계산하는 기능
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
System.out.println(
list.stream()
.reduce((x,y) -> x + y).get()
);
stream 의 index 중 가장 작은 값과 가장 큰 값을 찾아주는 기능
List<Integer> list = Arrays.asList( 8, 3, 6, 12, 7, 2 );
System.out.println(
list.stream()
.min(Comparator.comparing(x ->x)).get()
); // 2
List<Integer> list = Arrays.asList( 8, 3, 6, 12, 7, 2 );
System.out.println(
list.stream()
.max(Comparator.comparing(x ->x)).get()
); // 12
대용량 stream 을 병렬로 변경해 작업의 효율을 높히는 기능
stream.parallel() // <- 병렬로 변경
.distinct().limit(5000).sorted()
.forEach(System.out :: println)
연산결과가 스트림이 아닌 연산 (단 한번만 사용가능하며 스트림 요소를 소모함)
모든 요소를 return 한후 stream 을 종료하는 기능
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> strm = list.stream();
strm.forEach(System.out :: print); //12345
//----- 아래 코드와 동일한 기능 ---------------//
for (Integer i : list)
System.out.print(i); //12345
stream 내 요소의 갯수를 return 하는 기능
List<String> list = Arrays.asList(
"book", "desk", "keyboard", "mouse", "cup"
);
int count = (int) list.stream() // 스트림 생성
.filter(w -> w.contains("o")) // 필터링
.count(); // index 갯수 확인
System.out.println(count); // 3
stream 의 중간연산을 거친 index 들을 원하는 형태로 파싱해주는 기능
List<String> list = Arrays.asList(
"banana" , "apple", "are" , "cat"
);
List <String> a = list.stream()
.filter(name -> name.startsWith("a"))
.collect(Collectors.toList());
System.out.println(a); // [apple, are]
List<String> list = Arrays.asList(
"banana" , "apple", "are" , "cat"
);
System.out.println(
list.stream()
.filter(name -> name.startsWith("a"))
.collect(Collectors.joining(", "))
); // apple, are