Stream

뾰족머리삼돌이·2023년 12월 20일
0

JAVA

목록 보기
5/8

Stream<T>

자바 8에서 추가된 클래스로 배열이나 List같이 연속된 데이터들을 이용한 처리를한다
ex: 배열 정렬, 하나씩 출력하기, 특정 아이템 가져오기 등등

특징

  • 원본 데이터를 변경하지 않는다

  • 중간 오퍼레이션과 종료 오퍼레이션으로 나뉜다

    • 중간 오퍼레이션 : Stream을 반환
    • 종료 오퍼레이션 : 결과를 반환
  • 중간 오퍼레이션은 Lazy 하기 작업된다
    - 종료 오퍼레이션이 동작할 때까지 동작하지 않는다


연습문제

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으로 시작하는 수업");

// 1

System.out.println("close 되지 않은 수업");

// 2

System.out.println("수업 이름만 모아서 스트림 만들기");

// 3

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>> ddingsEvents = new ArrayList<>();
ddingsEvents.add(springClasses);
ddingsEvents.add(javaClasses);


System.out.println("두 수업 목록에 들어있는 모든 수업 아이디 출력");

// 4

System.out.println("10부터 1씩 증가하는 무제한 스트림 중에서 앞에 10개 빼고 최대 10개 까지만");

// 5

System.out.println("자바 수업 중에 Test가 들어있는 수업이 있는지 확인");

// 6

System.out.println("스프링 수업 중에 제목에 Spring이 들어간 제목만 모아서 List로 만들기");

정답

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으로 시작하는 수업");
List<OnlineClass> startwithSpring = springClasses.stream()
        .filter(onlineClass -> onlineClass.getTitle().startsWith("spring"))
        .collect(Collectors.toList());

startwithSpring.forEach(System.out::println);

// 1
System.out.println("close 되지 않은 수업");
springClasses.stream()
        .filter(Predicate.not(OnlineClass::isClosed))
        .forEach(System.out::println);

// 2
System.out.println("수업 이름만 모아서 스트림 만들기");
Stream<String> titleStream = springClasses.stream()
        .map(OnlineClass::getTitle);

titleStream.forEach(System.out::println);

// 3
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>> ddingsEvents = new ArrayList<>();
ddingsEvents.add(springClasses);
ddingsEvents.add(javaClasses);


System.out.println("두 수업 목록에 들어있는 모든 수업 아이디 출력");
ddingsEvents.stream()
        .flatMap(onlineClasses -> onlineClasses.stream()
                .map(OnlineClass::getId))
        .forEach(System.out::println);
// 4
System.out.println("10부터 1씩 증가하는 무제한 스트림 중에서 앞에 10개 빼고 최대 10개 까지만");
Stream.iterate(10, i->i+1)
        .skip(10L)
        .limit(10L)
        .forEach(System.out::println);

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

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

0개의 댓글