stream
stream 파이프라인
중개 오퍼레이션
종료 오퍼레이션
걸러내기
변경하기
생성하기
제한하기
스트림에 있는 데이터가 특정 조건을 만족하는지 확인
개수 세기
스트림을 데이터 하나로 뭉치기
예제 풀이
OnlineClass
public class OnlineClass {
private Integer id;
private String title;
private boolean closed;
public OnlineClass(Integer id, String title, boolean closed) {
this.id = id;
this.title = title;
this.closed = closed;
}
public void setId(Integer id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setClosed(boolean closed) {
this.closed = closed;
}
public Integer getId() {
return id;
}
public String getTitle() {
return title;
}
public boolean isClosed() {
return closed;
}
}
App
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 developer",false));
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>> alwaysEvents=new ArrayList<>();
alwaysEvents.add(springClasses);
alwaysEvents.add(javaClasses);
System.out.println("spring으로 시작하는 수업");
springClasses.stream()
.filter(c -> c.getTitle().startsWith("spring"))
.forEach(c->System.out.println(c.getId()));
System.out.println("close 되지 않은 수업");
springClasses.stream()
.filter(Predicate.not(OnlineClass::isClosed))
.forEach(o->System.out.println(o.getId()));
System.out.println("수업 이름만 모아서 스트림 만들기");
springClasses.stream()
.map(OnlineClass::getTitle)
.forEach(System.out::println);
System.out.println("두 수업 목록에 들어있는 모든 수업 아이디 출력");
alwaysEvents.stream()
.flatMap(Collection::stream)
.forEach(o->System.out.println(o.getId()));
System.out.println("10부터 1씩 증가하는 무제한 스트림 중에서 10개 빼고 최대 10개까지만");
Stream.iterate(10,i->i+1)
.skip(10)
.limit(10)
.forEach(System.out::println);
System.out.println("자바 수업 중에 Test가 들어있는 수업이 있는지 확인");
boolean test=javaClasses.stream()
.anyMatch(c->c.getTitle().contains("Test"));
System.out.println(test);
System.out.println("스프링 수업 중에 제목이 spring이 들어간 것만 제목만 모아서 List로 만들기");
List<String> spring=springClasses.stream()
.filter(o->o.getTitle().contains("spring"))
.map(OnlineClass::getTitle)
.collect(Collectors.toList());
spring.forEach(System.out::println);
}
}
출력
spring으로 시작하는 수업
1
2
3
4
close 되지 않은 수업
3
4
5
수업 이름만 모아서 스트림 만들기
spring boot
spring data jpa
spring mvc
spring core
rest api developer
두 수업 목록에 들어있는 모든 수업 아이디 출력
1
2
3
4
5
6
7
8
10부터 1씩 증가하는 무제한 스트림 중에서 10개 빼고 최대 10개까지만
20
21
22
23
24
25
26
27
28
29
자바 수업 중에 Test가 들어있는 수업이 있는지 확인
true
스프링 수업 중에 제목이 spring이 들어간 것만 제목만 모아서 List로 만들기
spring boot
spring data jpa
spring mvc
spring core