본문 바로가기
정리/Java

Java - Stream 중간 연산자

by 난파선 2017. 3. 6.




Stream의 중간 연산자
메서드 설명
자르기
IntStream skip(long n) 매개변수의 갯수 만큼 건너뛰기
IntStream limit(long maxSize) maxSize만큼 출력하기
필터 - 조건에 맞는 요소 찾아내기

Stream<T> filter(Predicate<? super T> predicate)

predicate 조건에 맞는 요소만 추출
Stream<T> distinct() 고유요소 필터링 중복제거
정렬
Stream<T> sorted() 정렬
Stream<T> sorted(Comparator<? super T> comparator) 지정된 Comparator로 정렬
매핑 - 요소 변환
Stream<R> map(Function<? super T, ? extends R> mapper) 요소 각각의 Function적용
Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>) 스트림의 스트림을 스트림으로 변환
기타
Stream<T> peek(Consumer<? super T> action) 중간연산 미리보기



스트림 축소

  • 주어진 사이즈 이하의 크기를 갖는 새로운 스트림을 반환하는 limit(n) 메서드

요소 건너뛰기

  • 처음 n개 요소를 제외한 스트림을 반환하는 skip(n) 메서드
List<String> names = menu.stream()
        .skip(2// 2개를 건너 뛴다.
        .limit(3//3개만 출력한다.
        .collect(Collectors.toList());


필터
  • filter 변환은 새로운 스트림을 돌려주는 데 이 스트림은 특정 조건과 일치하는 요소로 구성된다.
  • filter 메서드의 인자는 Predicate<T>이다.
menu.stream()
    .filter(Food::isVegetarian) //채식요리인지
    .collect(toList);

고유 요소 필터링(중복 제거)

  • distinct() 고유 요소로 이루어진 스트림을 반환한다. (hashCode, equals)
Stream<Integer> st = Stream.of(1,2,3,3,3,4,5,5);
st.distinct().forEach(System.out::print);    //=>12345

정렬

Stream<Integer> so = Stream.of(1,2,8,10,3,4,6,5);
so.sorted().peek(System.out::print)  //=>123456810
.sorted(Comparator.naturalOrder()).peek(System.out::print)  //=>123456810  - 기본정렬
.sorted(Comparator.reverseOrder()).peek(System.out::print)  //=>108654321  - 역정렬
.sorted((a, b) -> a.compareTo(b)).forEach(System.out::print);  //=>123456810  - 람다식 사용


요소 변환 - 객체에서 특정 데이터를 선택하는 작업

  • map, flatMap 메서드가 있다.
  • map 메서드를 연결할 수 있다.
menu.stream()
    .filter(d -> d.getCalories() > 300)
    .map(Food::getName)   // 이름을 리턴한다.
    .map(String::length)  // 이름의 길이를 리턴한다.
    .collect(Collectors.toList())
);

Stream<String[]> sa = Stream.of(new String[]{"abc""def""ghi" }
new String[]{"123""456""789"});

sa.flatMap(Arrays::stream).forEach(System.out::println);  //Stream<String>//=>abc def ghi 123 456 789


'정리 > Java' 카테고리의 다른 글

Java - Stream 최종 연산자  (0) 2017.03.08
Java - Optional  (0) 2017.03.07
Java - 스트림(Stream) 생성  (0) 2017.03.04
Java - 스트림(Stream) 작업흐름  (0) 2017.03.04
Java - 스트림(Stream)과 컬렉션  (0) 2017.03.03

댓글