[1. Stream이란]
- Stream은 데이터 집합체(흐름)를 쉽게 구성할 수 있도록 제작된 클래스이다.
- Stream의 lambda 함수를사용할 경우 데이터를 더 쉽고 편리하게 정제할 수 있으며(데이터 필터링, 중복제거, 정렬 등) 코드도 더 보기쉽게 짤 수 있다.
- 여러가지 필터링 메서드를 한번에 구성해서 여러가지 조건으로 정제된 데이터를 출력할 수 있다. (스트림 내의 데이터가 변하는 것은 아님)
[2. Stream 생성]
방법 1. Stream<데이터 타입> 스트림명 = Stream.of(객체1, 객체2, 객체3, ··· )
- 원하는 데이터를 마음대로 삽입하여 생성
Stream<Integer> example1 = Stream.of(1, 2, 3, 4, 5);
방법 2. Stream<데이터 타입> 스트림명 = Stream.generate(Supplier<데이터 타입> obj)
- 데이터를 규칙에 맞게 삽입하여 생성
Stream<Double> example2 = Stream.generate(Math::random);
방법 3. Stream<데이터 타입> 스트림명 = Stream.concat(스트림1, 스트림2)
- 두 가지 스트림을 결합하는 방법
Stream<Integer> stream1 = Stream.of(1, 2, 3);
Stream<Integer> stream1 = Stream.of(4, 5, 6);
Stream<Integer> result = Stream.concat(stream1, stream2); //1, 2, 3, 4, 5, 6
[3. 데이터 필터링]
(1) filter : Stream<데이터타입> 결과 스트림명 = 정제할 스트림명.filter(조건)
- 스트림 내의 데이터를 조건에 맞게 정제하여 복사
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> result1 = stream.filter(x -> (x > 3)); //4, 5
Stream<Integer> result12 = stream.filter(x -> (x < 3)); //1, 2
(2) distinct : Stream<데이터타입> 결과 스트림명 = 정제할 스트림명.distinct()
- 스트림 내의 데이터 중복을 제거한 후 복사
Stream<String> stream = Stream.of("A", "B", "A", "C", "C", "B");
Stream<String> result = stream.distinct(); //A, B, C
(3) sorted : Stream<데이터타입> 결과 스트림명 = 정렬할 스트림명.sorted((o1, o2) -> o1 - o2)
- 스트림 내의 데이터를 조건에 맞게 정렬
Stream<Integer> stream = Stream.of(4, 2, 5, 1, 3);
Stream<Integer> desc = stream.sorted((i1, i2) -> i2 - i1); // 5, 4, 3, 2, 1
Stream<Integer> asc = stream.sorted((i1, i2) -> i1 - i2); // 1, 2, 3, 4, 5
(4) limit : Stream<데이터타입> 결과 스트림명 = 제한할 스트림명.limit(앞에서부터 출력할 개수)
Stream<String> stream = Stream.of("J", "A", "V", "A", "S", "C", "R", "I", "P", "T");
Stream<String> result = stream.limit(4); //J, A, V, A
(5) skip : Stream<데이터타입> 결과 스트림명 = 제한할 스트림명.skip(앞에서부터 생략할 개수)
Stream<String> stream = Stream.of("J", "A", "V", "A", "S", "C", "R", "I", "P", "T");
Stream<String> result = stream.skip(4); //S, C, R, I, P, T
(6) collect : Stream<데이터타입> 결과 스트림명 = 다른 형태로 바꿀 스트림명.collect(Collectors.to~)
[4. 파이프라인]
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<Integer> example = Stream.of(4, 4, 1, -1, -3, 2, -5, 0, 0, -2, -4, 5, 3);
final List<Integer> result = example
.distinct() //4, 1, -1, -3, 2, -5, 0, -2, -4, 5, 3
.sorted((i1, i2) -> i1 - i2) //-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
.filter(x -> (x > 0)) //1, 2, 3, 4, 5
.limit(3) //1, 2, 3
.collect(Collectors.toList());
result.forEach(System.out::print);
}
}
'Lang > Java' 카테고리의 다른 글
[java] 접근 제어자 - public, protected, private 간단 정리 및 예시 (0) | 2023.10.18 |
---|---|
[spring] IoC 컨테이너 (0) | 2023.06.08 |
[java] 예외처리 (0) | 2023.06.04 |
[java] 추상화와 인터페이스 (0) | 2023.06.04 |
[java] 객체 지향 프로그래밍 (0) | 2023.06.04 |