인프런의 더자바, JAVA8 강의를 들으며 정리한 내용입니다.
List<String> names = new ArrayList<>();
names.add("ahreum"); names.add("jenny"); names.add("nami");
Stream<Object> stringStream = names.stream().map(String::toUpperCase);
// 원본 데이터를 바꾸지 않음
names.forEach(System.out::print); //ahreum jenny nami
stringStream.forEach(System.out::println); // AHREUM JENNY NAMI
//중개형 oprator는 lazy 하다. 종료형 오퍼레이터가 있어야 중개형이 실행됨. 없으면 실행 안되고 선언만 됨
names.stream().map((s) -> {
System.out.println(s); // 실행안됨
return s.toUpperCase();
});
names.stream().map((s) -> {
System.out.println(s);
return s.toUpperCase();
}).collect(Collectors.toList()); //실행됨. ahreum jenny nami
걸러내기 : Filter(Predicate)
변경하기 : Map(Function) 또는 FlatMap(Function)
생성하기 : generate(Supplier) 또는 Iterate(T seed, UnaryOperator)
제한하기 : limit(long) 또는 skip(long)
스트림에 있는 데이터가 특정 조건을 만족하는지 확인 : anyMatch(), allMatch(), nonMatch()
개수 세기 : count()
스트림을 데이터 하나로 뭉치기 : reduce(identity, BiFunction), collect(), sum(), max()
List<B_OnlineClass> classes1 = new ArrayList<>();
classes1.add(new B_OnlineClass(1,"springBoot",true));
classes1.add(new B_OnlineClass(2,"studyWithMe",false));
classes1.add(new B_OnlineClass(3,"JPA",true));
classes1.add(new B_OnlineClass(4,"react",false));
classes1.add(new B_OnlineClass(5,"spring java8",true));
//1. 걸러내기
System.out.println("close 되지 않은 수업");
classes1.stream()
.filter(Predicate.not(B_OnlineClass::getClosed))
.forEach(n->System.out.println(n.getTitle())); //studyWithMe react
List<B_OnlineClass> classes2 = new ArrayList<>();
classes2.add(new B_OnlineClass(6,"sinNanDa",true));
classes2.add(new B_OnlineClass(7,"Test sul",false));
classes2.add(new B_OnlineClass(8,"hey",true));
List<List<B_OnlineClass>> ahreumEvents = new ArrayList<>();
ahreumEvents.add(classes1);
ahreumEvents.add(classes2);
//2. 변경하기
System.out.println("두 수업 목록에 있는 모든 수업 아이디 출력");
ahreumEvents.stream()
.flatMap(Collection::stream) //list 를 flat하게 만듦
.forEach(oc -> System.out.println(oc.getId())); //1 2 3 4 5 6 7 8
// 3. 생성하기, 4. 제한하기
System.out.println("10부터 1씩 증가하는 무제한 스트림 중에서 앞에 10개 빼고 최대 10개 까지만");
Stream.iterate(10, i->i+1)
.skip(10)
.limit(10)
.forEach(System.out::println);