Super Coding Addict
Ch12. 스트림 (1) 본문
* 스트림
- 자료의 대상과 상관없이 동일한 연산 수행할 수 있는 기능 --> 자료의 추상화
- 배열, 컬렉션(ArrayList)에 동일한 연산이 수행되어 일관성있는 처리 가능
- 한번 생성하고 사용한 스트림 재사용 불가 --> 스트림 객체 새로 만들어야 함!
( 스트림은 원본 배열을 건드리는 게 아니라, another 메모리에서 하나씩 꺼내서 소모하는 연산이 이루어지므로 )
- 중간연산과 최종연산으로 구분되며, 최종연산이 수행되어야 모든 연산이 적용되므로 중간연산 결과를 도중 확인불가
* 스트림 연산 - 중간 연산
- filter() : 조건에 맞는 요소를 추출
ex) 문자열 길이가 5이상인 요소만 출력하기
sList.stream().filter(s-> s.length() >= 5).forEach(s -> System.out.println(s));
- map() : 요소를 변환
ex) 고객 클래스에서 고객 이름만 가져오기
customerList.stream().map(c -> c.getName()).forEach(s-> System.out.println(s));
* 예제
# IntArrayTest 클래스
package ch12.stream;
import java.util.Arrays;
public class IntArrayTest {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
int sum = Arrays.stream(arr).sum();
int count = (int)Arrays.stream(arr).count();
System.out.println(sum);
System.out.println(count);
System.out.println(Arrays.stream(arr).reduce(0, (a,b)->a+b));
}
}
--> 숫자 1,2,3,4,5를 담은 int형 배열 arr선언
--> 배열의 경우 Arrays클래스의 stream메서드를 활용하여 스트림을 생성한다
--> 스트림 생성후 각각 sum()과 count()메서드로 최종연산을 하면 결과값은 15와 5가 된다
# ArrayListStreamTest 클래스
package ch12.stream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class ArrayListStreamTest {
public static void main(String[] args) {
List<String> sList = new ArrayList<String>();
sList.add("Tomas");
sList.add("Edward");
sList.add("Jack");
Stream<String> stream= sList.stream();
stream.forEach(s->System.out.print(s + " "));
System.out.println(); //결과값 : Tomas Edward Jack
sList.stream().sorted().forEach(s->System.out.print(s + " "));
//sorting은 comparable이 구현이 되어있어야 한다 (String은 comparable하다)
// 결과값 : Edward Jack Tomas
System.out.println();
sList.stream().map(s->s.length()).forEach(n->System.out.println(n));
// 결과값 : 5
6
4
}
}
--> 컬렉션을 String타입의 ArrayList로 생성한 뒤, 이름 3개를 add
--> 컬렉션의 경우 stream()메서드를 직접 쓸 수 있으므로 sList.stream()과 같이 스트림을 생성할 수 있으며, 반환형은 Stream형이다.
'JAVA 문법' 카테고리의 다른 글
Ch13. 예외 처리 (0) | 2021.02.09 |
---|---|
Ch12. 스트림 (2) (0) | 2021.02.06 |
Ch12. 람다식 (2) (0) | 2021.02.06 |
Ch12. 람다식 (1) (0) | 2021.02.06 |
Ch07. 상속과 다형성 (1) (0) | 2021.01.22 |