생성 stream
가공(분류, 필터, 정렬, 연산, 등...)
스트림이 계속 열려있으니까 가공을 여러번 가능함
수집
@Test
public void ex01(){
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(4);
list.add(2);
list.add(3);
list.add(1);
Stream<Integer> stream = list.stream();
stream.forEach( t -> {
System.out.println(t);
} );
System.out.println("=================");
// 같은 코드인데 위에꺼로 쓰자
Stream<Integer> stream2 = list.stream();
stream2.forEach(new Consumer<Integer>() {
@Override
public void accept(Integer t){
System.out.println(t);
}
});
System.out.println("=================");
// 문법임
Stream<Integer> stream3 = list.stream();
stream3.forEach(System.out::println);
}
필터, 맵은 ctrl+space 해서 람다식 넣으면 편하다
스트림 필터링 :
filter() : 조건으로 걸러낼 때 사용
distinct() : 중복 제거
스트림 변환 :
map() : 가공할때 자주 사용
flatMap() : 리스트의 각 인덱스에 또 리스트가 있으면 그런걸 다 벗겨서 넣어줌
스트림 제한 : limit(), skip()
스트림 정렬 : sorted()
스트림 연산 결과 확인 : peek() : 지연연산이라 여러 작업을 하면 하나씩 한번에 실행돼서 보기 힘듬...
https://bugoverdose.github.io/development/stream-lazy-evaluation/#lazy-vs-eager
forEach : 스트림의 각 요소에 대해 특정 작업을 수행할 때 사용됩니다.
이 메서드는 스트림의 모든 요소에 대한 반복을 수행하면서 각 요소에 대한 작업을 지정하는데 람다식을 사용함
.collect(Collectors.toList());
스트림을 컬렉션(List)로
@Test
public void ex03() {
List<Integer> list = Arrays.asList(1, 2, 3, 4);
List<Integer> newList = list.stream()
.filter(t -> t != 3)
.map(t -> {
Integer r = t * 2;
return r;
})
.collect(Collectors.toList());
newList.stream().forEach(t -> System.out.println(t));
}
스니펫 설정
https://getinthere.notion.site/5-VsCode-4cc5772c195b453dbd43a59ab93b7b34
출처
https://youtu.be/IUsiEIWXeLY?si=if8FL9oQKNERz3Es
선생님은 스니펫 씀