자료의 대상과 관계없이 동일한 연산을 수행
(배열, 컬렉션)
-> 일관성 있는 연산으로 자료의 처리를 쉽고 간단
-> 자료 처리에 대한 추상화가 구현
주의할 점
1. 한번 생성하고 사용한 스트림은 재사용 할 수 없음
2. 자료에 대한 스트림을 생성하여 연산을 수행하면 스트림은 소모됨
ex) 배열의 정수를 더하는 스트림을 구하고 평균을 구해야 될 경우 다시 생성하여 사용해야 한다.
3. 스트림 연산은 기존 자료를 변경하지 않음
-> 자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간은 별도로 생성되므로 연산이 수행되도 기존 자료에 대한 변경은 발생하지 않음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class StreamTest {
public static void main(String args[]) {
// 바로 초기화. new 생략.
int[] arr = {1,2,3,4,5};
// 기존 for문을 사용하여 더하는 방식
//for(int num : arr)
// Arrays 클래스
// 모든 Array는 Arrays 클래스를 활용 가능.
// 모든 메소드는 클래스 메소드(static method)이므로,
// 객체를 생성하지 않고도 바로 사용할 수 있습니다.
Arrays.stream(arr).forEach(n->System.out.println(n));
// IntStream is.메소드명()
// IntStream is = Arrays.stream(arr);
// is.forEach(n->System.out.println(n)); // is는 재사용 불가
int sumVal = Arrays.stream(arr).sum();
long countVal = Arrays.stream(arr).count();
int sum = Arrays.stream(arr).sum();
System.out.println("sum : "+sum);
}
}
|
cs |
* 스트림 연산은 중간연산과 최종연산으로 구분
중간연산 : 여러개의 연산이 적용 가능
최종연산 : 마지막에 한번만 적용
최종연산이 호출되어야 중간연산에 대한 수행이 이루어 지고 결과가 만들어짐
따라서 중간연산에 대한 결과를 연산 중에 알수 없음
ex) 중간연산에 sort 했다고 해서 값이 sort된 값이 되어 있지 않고 최종연산이 호출되어야 실행됨
이를 지연 연산이라고 함
중간 연산 : filter(), map(), sorted() 등
최종 연산 : forEach(), count(), sum() 등
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class StreamTest {
public static void main(String args[]) {
// IntStream 과 같이 Primative 데이터의 Stream은 존재하지만
// Stream 클래스의 경우 제네릭으로 타입을 명시 해주어야 함
// Collection의 경우 stream()으로 호출가능.
// stream()은 Collection의 메소드이다.
Stream<String> stream = sList.stream();
stream.forEach(s->System.out.println(s));
sList.stream().sorted().forEach(s->System.out.println(s));
sList.stream().map(s->s.length()).forEach(n->System.out.println(n));
sList.stream().filter(s->s.length()>=5).forEach(s->System.out.println(s));
}
}
|
cs |
'OOP > Java' 카테고리의 다른 글
사용자 정의 예외 클래스 (0) | 2022.05.18 |
---|---|
예외처리 (Exception)는 왜 하는가? (0) | 2022.05.11 |
연산 수행에 대한 구현 reduce() 연산 (0) | 2022.05.10 |
람다식 구현 방식 (0) | 2022.05.09 |
람다식(Lamda expression) (0) | 2022.05.02 |