자바의 정석 14장 스트림
스트림의 최종 연산 (840p)
중간연산 : 스트림을 반환
최종연산 : 스트림 요소 소모, 스트림이 닫힘, int, boolean, Optional 반환
forEach()
반환타입이 void로 스트림의요소를 출력하는 용도로 주로 사용됨
조건검사 - allMatch(), anyMatch(), noneMatch()m findFirst(), findAny()
- boolean allMatch (Predicate<? super T> predicate)
- 스트림의 요소 전체가 조건을 만족하면 true 반환
- boolean anyMatch (Predicate<? super T> predicate)
- boolean noneMatch (Predicate<? supper T> predicate)
findFirst()와 findAny()는 스트림의 요소를 반환하는데 결과가 null일수 있어서 Optional을 사용한다. - 반환타입이 Optional
Optional<Student> stu = stuStream.filter(s -> s.getTotalScore() <= 100).findFirst();
Optional<Student> stu = parallelStream.filter(s -> s.getTotalScore() <= 100).findAny();
- findFirst() : 첫번째 요소를 반환한다.
- findAny() : 병렬스트림일때 사용, 아무거나 하나 반환
*리듀싱 - reduce()
스트림의 요소를 하나씩 줄여가며 누적 연산 수행
- Optional reduce(BinaryOperator accumulator)
- T reduce(T identity, BinaryOperator accumulator)
- identity : 초기값
- accumulator : 수행할 연산
오늘 한일
- 미션5부터 난이도가 확 올라갔다. 이전에는 주어진 요구사항대로 구현하고 내가 로직을 따로 구현해야하는것이 거의 없었는데 미션5부터는 내가 직접 구현해야하는게 늘어났다. 나같은 경우에는 혼자 설계하면 더 어렵겠지만 요구사항에 있는것에 너무 벗어나지 않는 선에서 생각해야하는것도 어렵다.
- 자바의 정석에서 스트림 최종연산부분까지 학습하고 함수형프로그래밍 실습문제를 푸는데 스트림부분을 해내서 뿌듯하다. 손쉽게 풀어낸건 아니라 아직도 어려운 감이 있지만 함수형프로그래밍으로 코드를 짰다는 사실이 기쁘다. 옵셔널실습은 첫번째 문제부터 막혀서 내일 다시 해봐야겠다. 옵셔널 개념은 이해했다고 생각했는데 확실히 코드에 직접 적용하려니깐 어렵다.
Todo
(내일)
- 미션5... 기물의 개수 반환하는거 어떻게 구현할지 생각해보자
- 옵셔널 실습 해보고 너무 생각이 안나면 넘어가자