자바 스트림 사용법
자바를 공부하며 스트림은 강력한 도구인 것 같은데 이해가 쉽지 않다. 스트림을 처음 본다면 아래 링크로 들어가면 전에 포스팅했던 스트림에 대한 자세한 내용들이 나온다.
스트림이란?
https://2minmin2.tistory.com/93
코드로 보는 예시
구현 내용: 리스트에서 짝수를 찾고, 그 짝수들의 제곱을 출력하는 코드
1. for문 사용 코드
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
for (int number : numbers) {
if (number % 2 == 0) {
System.out.println(number * number);
}
}
}
}
출력
4
16
리스트에 숫자를 담아서 for문을 활용하여 리스트에서 하나씩 numbers의 각 인덱스 값을 뽑고, if문으로 짝수를 찾아 곱한 값을 출력하는 코드이다. 사실 다른 언어를 가도 for문 if문의 활용법에는 큰 차이가 없다. 그래서 프로그래밍을 공부했고, 자바를 모른다하더라도 이해가 되는 코드이다. 그럼 이 코드를 Stream으로 구현하면 어떻게 다를까?
아래는 Stream 코드를 작성해보았다.
2. Stream 사용 코드
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
numbers.add(5);
numbers.stream() // 리스트를 스트림으로 변환
.filter(number -> number % 2 == 0) // 짝수만 필터링
.map(number -> number * number) // 각 짝수를 제곱으로 변환
.forEach(System.out::println); // 결과 출력
}
}
출력
4
16
뭔가 이해가 될 것 같기도 하지만, 생소하다.
.stream()은 리스트를 스트림으로 변환하는 메서드
.filter()는 조건에 맞는 요소만을 걸러내는 중간 연산
.map()은 각 요소를 변환하는 중간 연산이며, 여기서는 짝수를 제곱값으로 변환
.forEach()는 각 요소를 출력하는 최종 연산이다.
어떤 느낌이냐면
- filter(): 주어진 조건에 맞는 요소만을 걸러내줘 (중간 연산) - 조건문
filter(number -> number % 2 == 0) 여기서는 짝수만을 걸러내라는 의미.
조건식 number % 2 == 0은 해당 요소가 짝수인지를 확인
- map(): 각 요소를 변환해줘 (중간 연산) - 변환
map(number -> number * number) 여기서는 각 짝수를 제곱으로 변환해달라는 의미.
각 요소에 대해 제곱 연산 - forEach(): 각 요소에 대해 최종 처리해줘 (최종 연산) - 최종 처리
forEach(System.out::println) 여기서는 마지막으로 각 요소를 출력해달라는 의미
System.out::println은 출력에 각 요소를 출력
그럼 짝수만 출력하는 코드를 짜보자.
기존에 사용했던 방식은 대부분 for문을 돌면서 if문 조건에 (number % 2 ==0) 이런 식으로 넣었을 것이다.
그대로 Stream으로 바꾸면
// 짝수만을 필터링하여 출력
numbers.filter(number -> number % 2 == 0)
.forEach(System.out::println);
대충 이런 식으로 쓰면 될 거다.
numbers를 꺼내서 number로 사용되는 반복문 느낌 + filter()가 조건문 느낌 + 최종 처리로 출력해주면 된다.
'Programming > Java' 카테고리의 다른 글
[Java] 스트림(Stream)이란? | 민민의 하드디스크 - 티스토리 (0) | 2024.02.05 |
---|---|
[Java] 스레드(Thread)란? (사용 이유, 사용법) | 민민의 하드디스크 - 티스토리 (0) | 2024.02.04 |
[Java - 자료구조] Map(HashMap, Hashtable, TreeMap)이란? (feat. JSON) | 민민의 하드디스크 - 티스토리 (0) | 2024.02.04 |
[Java] 제네릭(Generic)이란? | 민민의 하드디스크 - 티스토리 (2) | 2024.02.02 |
[Java - 자료구조] LinkedList와 ArrayList란? | 민민의 하드디스크 - 티스토리 (0) | 2024.02.02 |