사랑해 마니마니

Java Lambda 식에서 자주 사용하는 스트림 명령들(1) 본문

java

Java Lambda 식에서 자주 사용하는 스트림 명령들(1)

분리불안증후군 2018. 1. 9. 23:17

스트림 사용해 보기

  List<String> strList = Arrays.asList("a", "b", "c");
  long count = strList.stream()
                      .count();


                            


filter 사용해 보기

 1. filter 자체는 lazy 방식으로 동작함 그래서 꼭 eager 함수와 함께 안쓰면 runtime에서 실행되지 않음.
   

  strList.stream()
         .filter(s -> System.out.println(s)); // lazy 수행 방식으로 동작하지 않음


         

  strList.stream()          
         .filter(s -> System.out.println(s))
         .count(); // count와 같은 eager 함수가 따라 붙어야 동작함. 


         
 2. 그런데 위 코드는 ide에서 실행해 보면 동작하지 않음
    왜냐하면 filter는 boolean을 return하는 함수이기 때문.
    

  strList.stream()
         .filter(s -> {
                         System.out.println(s)
                         return true;
                      })
         .count(); // 이제 동작함
         


스트림들을 모아서 리스트로 만들자

  Stream.of("a","b","c")
       .collect(Collectors.toList());

 

map 사용해 보기

 1. map은 1:1로 변환(요소 하나를 변환된 요소 하나로 변환) 하는 함수임. 
 
    A -> A'
    B -> B'
    C -> C'
 
 2. 필터랑 같이 쓰면 좋음
 

    import static java.util.stream.Collectors.toList;
 
    List<Integer> collected = Stream.of(1,2,3,4,5,6)
                                    .filter(s -> s > 3)
                                    .collect(toList());  // collect도 eager 함수로 바로 실행됨


flatmap 사용해 보기

  flatmap은 stream을 연결하는 함수(같은 느낌임).
  책 설명은 flatMap 메소드는 주어진 값을 스트림으로 변환하고, stream을 모두 통합한다.
      

     List<Integer> collected = Stream.of(asList(1,2), asList(4,5), asList(6,7)) // 오호 이런 것도 됨
                                     .flatMap(i -> i.stream())  // int i = 0; i.stream()은 안되지만... 
                                     .collect(toList());   // 나중에 toSet() 이런 것도 나옴.


  
                                        

max와 min

   max, min은 eager함수 같은데 lazy함수 임, get()함수를 불러야 실행됨.
   

    int x = Stream.of(1,2,10, -10, 100)
                .max(Comparator.comparing(Integer::valueOf)) // 아래와 같은 결과를 만들어 냄. 
                .max(Integer::compareTo)                     // 
                .get();

'java' 카테고리의 다른 글

Java 정규 표현식  (0) 2019.05.01
정규표현식(작성 중)  (0) 2019.04.28
Comparator  (0) 2018.01.29
java array를 list로, list를 array로 바꾸기  (1) 2018.01.29
Comments