스트림이란?
IntStream, forEach
상황) 1~10까지 숫자를 출력하는 경우
import java.util.stream.IntStream;
class Main {
public static void main(String[] args) {
// 일반적인 방법
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
// 스트림
IntStream.rangeClosed(1, 10)
.forEach(e -> {
System.out.println(e);
});
// 스트림 - 축약 버전
IntStream.rangeClosed(1, 10)
.forEach(e -> System.out.println(e));
// 스트림 - 메서드 축약 람다식
IntStream.rangeClosed(1, 10)
.forEach(System.out::println);
}
}
Map
상황: 배열의 요소에 2씩 곱하기
import java.util.Arrays;
class Main {
public static void main(String[] args) {
// 일반적인 방법
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < arr.length; i++) {
arr[i] *= 2;
}
System.out.println(Arrays.toString(arr));
// 스트림
arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
resultArr = Arrays.stream(arr)
.map(e -> e * 2) // 이런식으로 줄여쓸 수 있다.
.toArray();
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(resultArr));
}
}
Filter, Collect
상황: 배열의 원소에서 홀수들은 없애고 나머지에 2씩 곱하기
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
class Main {
public static void main(String[] args) {
// 일반적인 방법
int[] arr = {33, 2, 55, 4, 51, 6, 71, 18, 29, 10};
List<Integer> resultAl = new ArrayList<>();
// 조건
for (int n : arr) if (n % 2 == 0) resultAl.add(n);
for (int i = 0; i < resultAl.size(); i++) {
int newValue = resultAl.get(i) * 2;
resultAl.set(i, newValue);
}
System.out.println(resultAl);
// 스트림
arr = new int[]{33, 2, 55, 4, 51, 6, 71, 18, 29, 10};
resultAl = Arrays.stream(arr)
.filter(e -> e % 2 == 0)
.map(e -> e * 2)
.collect(Collectors.toList());
System.out.println(resultAl);
}
}