티스토리 뷰
Stream은 다양한 데이터를 다루기 위한 라이브러리이다. Stream을 이용하면 배열뿐만 아니라 Collection도 다룰 수 있다.
Stream을 활용한 연산 방법은 중간 연산과 최종 연산으로 나눌 수 있다.
ex)
stream.distinct().sorted().forEach(System.out::println);
위 예제에서 distinct()와 sorted()는 중간 연산이고 forEach()는 최종 연산이다. 보이는 것과 같이 중간 연산은 연속해서 사용할 수 있고 최종연 산은 한 번만 가능하다.
이제 Stream의 특징을 보자
1) 일회성이다.
stream.sorted().forEach(System.out::println);
stream.distinct().forEach(System.out::println); // error
2) 지연(Lazy) 연산 처리
모든 최종 연산을 만나기 전까지 중간 연산이 되지 않는다는 것이다. 즉 최종 연산에서 모든 연산처리가 된다.
배열과 Collection을 람다식과 Stream을 활용하여 다양하게 바꿔봄으로써 람다식과 Stream에 익숙해지려 한다. 물론 람다식을 사용하지 않아도 Stream을 사용할 수 있지만 람다식에도 같이 익숙해지고 람다식을 사용하면 더 깔끔하기에 람다식을 같이 사용했다.
1) 0 ~ 9 반복문
for(int i = 0; i < 10; i++){
System.out.println(i);
}
IntStream.range(0, 10).forEach(i ->
System.out.println(i)
);
2) 0 ~ 9 반복문
for(int i = 0; i <= 9; i++){
System.out.println(i);
}
IntStream.rangeClosed(0, 9).forEach(i ->
System.out.println(i)
);
3) 9 ~ 1 반복문
for(int i = 9; i > 0; i--){
System.out.println(i);
}
IntStream.iterate(9, i -> i - 1).limit(9).forEach(i ->
System.out.println(i)
);
4) for each
for(Object object: list){
object
}
list.forEach(object -> {
object
});
5) card에는 point라는 int형 변수가 있고 아래 예제는 card 객체의 int형 변수들을 get 해서 합하는 과정이다.
int sum = 0;
for(Card card : cards){
sum += card.getPoint();
}
int sum = cards.stream().mapToInt(card -> card.getPoint()).sum();
6) 문자열 배열을 정렬 후 출력
String[] strArr = {"aaa", "ddd", "ccc"};
Stream<String> stream = Arrays.stream(strArr, 0, 2);
stream.sorted().forEach(System.out::println);
7) 문자열 List를 정렬 후 출력
List<String> strList = new ArrayList<String>();
strList.add("ccc");
strList.add("bbb");
strList.add("aaa");
Stream<String> strStreamArr = strList.stream();
strStreamArr.sorted().forEach(System.out::println);
'java&spring' 카테고리의 다른 글
[Java] toString 메서드 (0) | 2022.03.18 |
---|---|
[Java] 클로저(Closure) (0) | 2022.03.06 |
[Java] 문자열(String) 비교하기(==, equals) (0) | 2022.03.04 |
클래스 경로(Class Path)와 클래스 로더(Class Loader) (0) | 2017.08.11 |
[Java] 불변 객체(Immutable Object) (0) | 2017.07.14 |