728x90
스트림(Stream) 이란 ?
Java8부터 지원하는 Stream은 컬렉션, 배열등에 대해 저장되어있는 요소들을 하나씩 참조하며 반복적인 처리를 가능하게하는 기능이다. 이러한 Stream을 이용한다면 불필요한 for문과 그 안에서 이루어지는 if문등의 분기처리를 쓰지않고도 깔끔하고 직관적인 코드로 변형할 수 있다.
Stream 특징
- Stream은 데이터를 변경하지 않는다.
- Stream은 원본데이터로부터 데이터를 읽기만 할 뿐, 원본데이터 자체를 변경하지 않는다. - Stream은 일회용이다.
- Stream은 한 번 사용하면 닫혀서 재사용이 불가능하다. 필요하다면 정렬된 결과를 컬렉션이나 배열에 담아 반환할 수 있다. - Stream은 작업을 내부 반복으로 처리한다.
- Stream을 이용한 작업이 간결할 수 있는 비결중 하나가 바로 내부 반복이다. 내부 반복이라는 것은 반복문을 메서드의 내부에 숨길 수 있다는 것을 의미한다. (반복문이 코드 상에 노출되지 않다.)
Stream의 구조
Stream의 구조는 크게 세 가지로 볼 수 있다.
1. Stream 생성
2. 중개 연산
3. 최종 연산
세 가지로 구성되며 중개연산은 연산결과를 Stream형태로 반환하기 때문에 연속적으로 연결해서 사용할 수 있다.
정리하면 데이터소스객체집합.Stream생성().중개연산().최종연산(); 이다.
public class 스트림 {
public static void main(String[] args) {
String[] array = { "안녕하세요", "맑음", "cloud", "구름", "달빛", "눈" };
Set<String> set = Arrays.asList(array) // array를 List로 변형하고
.stream() // 1. stream 생성
.filter(e -> e.startsWith("cl")) // 2. 중개 연산 - cl로 시작하는 단어
.map(String::toUpperCase) // 2. 중개 연산 - 대문자로 변환
.collect(Collectors.toSet()); // 3. 최종 연산 - 중개 연산을 통해 가공된 stream을 모아준다.
set.forEach(e -> System.out.println(e));
System.out.println("==============================================");
String[] array2 = { "수성", "금성", "지구", "화성", "목성" };
List<String> list = Arrays.asList(array2) // array를 List로 변형하고
.stream() // 1. stream 생성
.sorted() // 2. 중개 연산 - 정렬(오름차순)
// .sorted(Comparator.reverseOrder()) // 2. 중개 연산 - 정렬(내림차순)
.filter(e -> e.startsWith("금")) // 2. 중개 연산 - 금으로 시작하는 단어
.map(e -> e = "혜성") // 2. 중개 연산 - 금으로 시작하는 단어를 혜성으로 변경
.collect(Collectors.toList()); // 3. 최종 연산 - 중개 연산을 통해 가공된 stream을 모아준다.
list.forEach(e -> System.out.println(e));
/////////////////// 출력결과 ////////////////////
// CLOUD
// ==============================================
// 혜성
}
}
728x90
'java' 카테고리의 다른 글
[java] 대용량 insert / insert 속도 향상 (0) | 2022.08.02 |
---|---|
[java] spring boot에서 git hub 연동하기 (0) | 2021.12.19 |
[java] Spring Tool Suite(STS) 설치하기 (0) | 2021.10.29 |
[java] 마이바티스 카멜케이스 자동으로 적용하는법 (0) | 2021.10.28 |
[java] 문자열을 DateTime 객체로 변환 (0) | 2021.10.27 |