자바 8에서 추가된 클래스로 배열이나 List같이 연속된 데이터들을 이용한 처리를한다
ex: 배열 정렬, 하나씩 출력하기, 특정 아이템 가져오기 등등
원본 데이터를 변경하지 않는다
중간 오퍼레이션과 종료 오퍼레이션으로 나뉜다
중간 오퍼레이션은 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);