스트림(Stream)
스트림은 데이터의 흐름을 표현하는 것으로, 데이터를 필터링, 매핑, 정렬, 집계하는 등의 다양한 연산을 선언적으로 수행할 수 있습니다. 스트림은 데이터 소스를 통해 생성되며, 연산을 통해 처리됩니다.
스트림 생성하기
컬렉션에서 생성
import java.util.*;
import java.util.stream.*;
class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
}
}
배열에서 생성
import java.util.*;
import java.util.stream.*;
class Main {
public static void main(String[] args) {
String[] array = {"a", "b", "c"};
Stream<String> stream = Arrays.stream(array);
}
}
스트림 빌더를 사용하여 생성
import java.util.*;
import java.util.stream.*;
class Main {
public static void main(String[] args) {
Stream<String> stream = Stream.of("a", "b", "c");
}
}
스트림 연산
filter : 조건에 맞는 요소만을 포함하는 새로운 스트림을 반환합니다.
import java.util.*;
class Main {
public static void main(String[] args) {
String[] array = {"a", "b", "c"};
Arrays.stream(array)
.filter(n -> n.equals("a"))
.forEach(n -> System.out.println(n)); // a 출력
}
}
map : 각 요소를 변환하는 새로운 스트림을 반환합니다.
import java.util.*;
class Main {
public static void main(String[] args) {
String[] array = {"a", "b", "c"};
Arrays.stream(array)
.map(n -> n + "abc")
.forEach(n -> System.out.println(n)); // aabc \n babc \n cabc 출력
}
}
sorted: 스트림의 요소를 정렬합니다.
import java.util.*;
class Main {
public static void main(String[] args) {
String[] array = {"b", "a", "c"};
Arrays.stream(array)
.sorted()
.forEach(n -> System.out.println(n)); // a \n b \n c 출력
}
}
최종 연산
forEach: 스트림의 각 요소에 대해 작업을 수행합니다.
import java.util.*;
class Main {
public static void main(String[] args) {
String[] array = {"b", "a", "c"};
Arrays.stream(array)
.sorted()
.forEach(System.out::println); // a \n b \n c 출력
}
}
collect: 스트림의 요소를 컬렉션으로 수집합니다.
import java.util.*;
import java.util.stream.Collectors;
class Main {
public static void main(String[] args) {
String[] array = {"b", "a", "c"};
List<String> lst = Arrays.stream(array)
.sorted()
.collect(Collectors.toList());
for(String s : lst) {
System.out.println(s); // a \n b \n c
}
}
}
reduce: 스트림의 요소를 결합하여 단일 결과를 생성합니다.
import java.util.*;
class Main {
public static void main(String[] args) {
String[] array = {"bc", "acs"};
Optional<Integer> lst = Arrays.stream(array)
.map(String::length)
.reduce((a,b) -> a+b);
System.out.println(lst); // Optonal[5] 출력
}
}
count: 스트림의 요소 개수를 반환합니다.
import java.util.*;
class Main {
public static void main(String[] args) {
String[] array = {"bc", "acs"};
long lst = Arrays.stream(array)
.count();
System.out.println(lst);
}
}
'Programming > Java' 카테고리의 다른 글
I/O 스트림 (0) | 2024.08.14 |
---|---|
람다 (0) | 2024.08.11 |
중첩 클래스 (0) | 2024.08.11 |
열거형, 가변인자, 어노테이션 (0) | 2024.08.11 |
컬렉션 프레임워크 (0) | 2024.08.10 |