티스토리 뷰

반응형

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);

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday
글 보관함
«   2024/12   »
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 26 27 28
29 30 31