🔍 스트림
- 여러 자료의 처리에 대한 기능을 구현해 놓은 클래스이다.
- 배열, 컬렉션 등의 자료를 일관성있게 처리할 수 있다.
✍ 스트림의 특징
- 자료의 대상과 관계없이 동일한 연산을 수행한다.
- 한번 생성하고 사용한 스트림은 재사용할 수 없다.
- 스트림의 연산은 기존 자료를 변경하지 않는다. (스트림 연산을 위해 사용하는 메모리 공간이 별도로 존재하기 때문이다.)
- 중간연산과 최종연산이 존재한다.
=> 중간연산은 여러개가 적용될 수 있고, 최종연산은 맨 마지막에 한 번 적용된다.
최종연산이 호출되지 않으면 중간연산이 아무리 많더라도 적용되지 않는다. 이를 지연연산(lazy evaluation)이라고 한다.
int[] arr = {1, 2, 3, 4, 5};
for(int i=0; i<arr.length; i++) {
System.out.println(arr[i]);
}
=> 일반적인 배열과, 그를 출력하는 반복문이다.
✍ 스트림을 활용한 람다식
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5}; // 배열
Arrays.stream(arr).forEach(n -> System.out.println(n)); // 스트림
}
=> 데이터 타입 추적이 가능하므로 n을 사용하였다. 스트림 클래스의 메서드를 호출하여 람다식을 사용하였다.
출력문이 하나이기 때문에 중괄호가 필요하지 않다. 그래서 세미콜론을 생략하였다.
💻
✍ 스트림의 연산
- 중간연산 : filter(), map()
- 최종연산: forEach(), count(), sum(), reduce()
✍ filter : 조건이 참인 경우만 추출함
public static void main(String[] args) {
String[] str = {"스파게티", "양념치킨", "후라이드치킨", "피자", "음료수"}; // 배열
Arrays.stream(str).filter(s -> s.length() > 3).forEach(s -> System.out.println(s));
}
=> 문자열 배열을 만든 후, 배열의 길이가 3보다 큰 문자열을 출력하고자 한다.
filter 메서드를 통해 중간연산을 한 후, forEach로 최종연산을 진행한다.
💻
=> 배열의 길이가 3보다 큰 문자열이 정상적으로 출력된 걸 확인할 수 있다.
✍ map() : 요소들을 순회하여 다른형식으로 변환
int[] arr = {1, 2, 3, 4, 5};
Arrays.stream(arr).map(n -> n + 10).forEach(n -> System.out.print(n + " "));
=> map()을 사용하여 배열의 각 요소에 10을 더해주는 코드를 작성하였다.
💻
주의!!!!!!!!!! 원본 arr의 복사본 stream을 생성하여 사용하고 재사용하지 않는다. 그렇기 때문에 원본 데이터는 유지된다.
System.out.println("원본 데이터 : " + Arrays.toString(arr));
💻
'개발 > Java' 카테고리의 다른 글
[MVC] ActionForward 클래스 (0) | 2023.03.23 |
---|---|
[Java] BigInteger, BigDecimal 클래스 (0) | 2023.03.20 |
[Java] 람다식 (Lambda Expressions) (0) | 2023.03.15 |
[Java] StringBuilder & StringBuffer (0) | 2023.03.11 |
[Java] Thread = 쓰레드 (0) | 2023.03.11 |