본문 바로가기
자바

자바 8 stream API

by 근즈리얼 2021. 7. 24.
728x90

stream에서 사용할 수 있는 api에 대해서 알아보자!!

 

1. 걸러내기 

- filter

- ex)제목에 spring을 포함하는 데이터만 스트림으로 

 

2. 변경하기

- map, flatmap

- ex) 리스트의 데이터를 문자열로 리턴

- ex) 특정 클래스의 리스트들의 리스트일 경우 특정 클래스로 리턴

 

3. 생성하기

- generate, Iterate

- 10부터 1씩 증가하는 무제한 숫자 스트임

 

4. 제한하기

- limit , skip

- ex) 위의 만들어진 무제한 스트림에서 앞에 10개를 빼고 10개를 리턴

 

5. 스트림에 특정조건을 만족하는 데이터가 있는지 확인

- antMatch(), allMatch(), nonMatch()

- ex) k로 시작하는 문자열이 있는지? true 또는 false를 리턴

 

6. 개수 세기

- count()

- ex) 10보다 큰 수의 개수

 

7. 스트림을 데이터 하나로 뭉치기

- reduce, collect, sum, max

- 모든 숫자 합 구하기

- 모든 데이터를 하나의 list 또는 set에 옮겨 담기

package stream_study.sec;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class App {

    public static void main(String[] args) {
        List<OnlineClass> springClasses = new ArrayList<>();
        springClasses.add(new OnlineClass(1,"spring boot",true));
        springClasses.add(new OnlineClass(2,"spring data jpa",true));
        springClasses.add(new OnlineClass(3,"spring mvc",false));
        springClasses.add(new OnlineClass(4,"spring core",false));
        springClasses.add(new OnlineClass(5,"rest api development",false));

        System.out.println("spring 으로 시작하는 수업");
        //TODO
        springClasses.stream()
                .filter(oc -> oc.getTitle().startsWith("spring"))
                .forEach(oc -> System.out.println(oc.getId()));

        System.out.println("close 으로 시작하는 수업");
        //TODO
        springClasses.stream()
                .filter(Predicate.not(OnlineClass::isClosed))
                .forEach(oc -> System.out.println(oc.getId()));

        System.out.println("수업 이름만 모아서 스트림 만들기");
        //TODO
        springClasses.stream()
                .map(OnlineClass::getTitle)
                .forEach(System.out::println);

        List<OnlineClass> javaClasses = new ArrayList<>();
        javaClasses.add(new OnlineClass(6,"The Java, Test",true));
        javaClasses.add(new OnlineClass(7,"The Java, Code manipulation",true));
        javaClasses.add(new OnlineClass(8,"The Java, 8 to 11",false));

        List<List<OnlineClass>> geunEnvents = new ArrayList<>();
        geunEnvents.add(springClasses);
        geunEnvents.add(javaClasses);

        System.out.println("두 수업 목록에 들어있는 모든 수업 아이디 출력");
        geunEnvents.stream().flatMap(Collection::stream)
                .forEach(oc -> System.out.println(oc.getId()));

        System.out.println("10부터 1씩 증가하는 무제한 스트림 중에서 앞에 10 빼고 최대 10개 까지만");
        //TODO
        Stream.iterate(10,i->i+1)
                .skip(10)
                .limit(10)
                .forEach(System.out::println);

        System.out.println("자바 수업 중에 Test가 들어있는 수업이 있는지 확인");
        //TODO
        boolean test = javaClasses.stream()
                .anyMatch(oc -> oc.getTitle().contains("Test"));
        System.out.println(test);

        System.out.println("스프링 수업 중에 제목에 spring이 들어간 제목만 모아서 List로 만들기");
        //TODO
        List<String> spring = springClasses.stream().map(OnlineClass::getTitle)
                .filter(title -> title.contains("spring"))
                .collect(Collectors.toList());

        spring.forEach(System.out::println);
    }
}

 

728x90

'자바' 카테고리의 다른 글

Map을 활용한 이중 for문 줄이기  (0) 2023.03.22
자바가상머신 (JVM)  (0) 2021.08.13
자바 8 stream 기본  (0) 2021.07.23
인터페이스 기본 메소드(Default Methods)  (0) 2021.07.16
람다식 매소드 레퍼런스  (0) 2021.07.13

댓글