1. Stream 이란?
Java8부터 지원하는 Stream은 컬렉션, 배열 등에 저장되어 있는 요소들을 하나씩 참조하며 반복적인 처리를 가능하게 하는 기능이다. Stream을 사용한다면 불필요한 for문과 if문 등의 분기처리를 쓰지 않고 깔끔하고 직관적인 코드로 변형할 수 있다.
2. Stream 특징
1) Stream은 원본 데이터를 변경하지 않는다.
- 원본 데이터로부터 데이터를 읽기만 할 뿐, 변경은 하지 않는다.
2) Stream은 일회용이다.
- 한 번 사용하면 닫혀서 재사용이 불가능하다. 필요시 정렬된 결과를 컬렉션이나 배열에 담아 반환할 수 있다.
3) Stream은 작업을 내부 반복으로 처리한다.
- 내부 반복을 통해 간결한 코드를 작성할 수 있다. (내부반복이란 반복문을 메서드 내부에 숨긴다는 의미)
3. Stream의 구조
데이터소스객체집합.Stream생성().중개연산().최종연산()
Stream의 구조는 크게 3가지로 볼 수 있다. 중개연산은 연산 결과를 Stream으로 반환하여 연속적으로 연결하여 사용이 가능하다.
1) Stream 생성
2) 중개 연산
3) 최종 연산
List<String> list =
Arrays.asList("a1", "a2", "b1", "b2", "c2", "c1", "c3");
Stream<String> filtered = list.stream()
.filter(s -> s.startsWith("c"))
.forEach(e -> System.out.println(e));
/*
//Stream<String> stream1 = list.stream();
//Stream<String> filtered = stream1.filter(s -> s.startsWith("c"));
//filtered.forEach(System.out::println);
*/
- filter(조건): 조건을 만족하는 Stream 리턴
4. IntStream의 range(), rangeClosed()
- range, rangeClose의 차이는 끝 값 포함 여부
- 특정 범위의 숫자를 차례대로 생성해주는 기능
1) range(s, e): s ~ (e - 1) ➜ 끝 값 포함X
2) rangeClosed(s, e): s ~ e ➜ 끝 값 포함O
5. Stream 을 기본형 Stream으로 변환
1) mapToObj(): IntStream ➜ Stream
2) mapToInt(): Stream ➜ IntStream
6. Stream Collect
1) Stream 모든 아이템을 1개의 String으로
.collect(Collectors.joining());
[참고] https://ahndding.tistory.com/23
[참고] https://codechacha.com/ko/stream-filter/
[참고] https://amagrammer91.tistory.com/64
[참고] https://ryan-han.com/post/dev/java-stream/
[참고] https://codechacha.com/ko/java8-stream-collect/
'Java > Java 학습' 카테고리의 다른 글
[JAVA] 예외 테스트 (jUnit5의 assertThrows) (0) | 2022.04.28 |
---|---|
[JAVA] JUnit5 기본 테스트 어노테이션(@Test, BeforeAll, @BeforeEach, @AfterAll, @AfterEach, @Disabled) (0) | 2022.04.28 |
[JAVA] UnitTest에서 사용하는 AssertJ의 AssertThat이란? (1) | 2022.04.28 |
[JAVA] Java8의 Optional이란? (0) | 2022.04.28 |
[JAVA] Map이란? HashMap 이란? (0) | 2022.04.27 |