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 |
댓글