본문 바로가기
Today I Learned 2024. 4. 12.

(24.04.12) Java의 정석 학습(Stream, Collector)

날이 너무 더워져서 주말에는 이불도 다 바꾸고 옷정리도 하면서

본캠프가 진행될 떄 시간이 없어서 못하는 불상사는 막을 수 있도록 해야겠다..

 


주간 학습 정리 WIL

  • 열거형 / 애너테이션
  • 람다식 Lambda expression
    • 메서드 참조
  • 함수형 인터페이스 Functional interface
  • 스트림
    • Optional
  • Collector인터페이스
    • Collector Collectors collect()

 객체에 관한 내용에서 이제 Collection 형의 자료들을 어떻게 다룰 것인지에 대해서 배운 주라고 생각한다.

어떻게 보면 SQL 쿼리문을 Java느낌으로 풀어내는 것인데 

아무래도 지네릭스를 사용한 객채의 타입 충돌이나 또는 예외 발생 등을 고려하여 일종의 법과 메서드가 모두 다르다보니

모두를 한번에 활용할 수 있다는 것은 일단은 무리가 있어보인다..

하지만, 코드를 봤을 때, 아 enum이 무엇인지 IntStream은 무엇인지 어떻겐 쓰이고 있는지를 대충이라도 파악을 할 수 있는 것에 의의를 두어야할 것이다.

 

블로그 말고도 Notion에는 더 자세하고, 교재에 있는 내용도 붙여가면서 제2의 JavaDB형태를 구축을 해놨기 때문에 본 캠프에 들어가거나 필요할때 언제나 볼 수 있도록 정리를 해 놓았다

Java의 정석 학습 간단 정리

더보기

Collector Collectors collect()

  • 리듀싱 reducing()***
  • 문자열 결합 joining()
  • 그룹화 & 분할 groupingBy() & partitioningBy()

 

Collector 구현하기

Collector 구성

  • 결국 반환 타입을 가지고 있는 어떤 메서드들을 가지고있고, 어떻게 할 건지를 람다식으로 가지고 있는 기능들

 

Supplier<A> supplier()

  • 작업 결과 저장 공간에 어떻게 누적을 할 것인지 정의

BiConsumer<A, T> accumulator()

  • 스트림 요소 수집 collect 방법 제공

BinaryOperator<A> combiner()

  • 스레드 처리 결과를 두 저장공간을 병합 방법 제공 : 병렬스트림

Function<A, R> finisher()

  • 결과 최종적으로 변환 방법, 아무런 것이 없다면 Function.identiy()

**Characteristics.CONCURRENT** 병렬처리할 수 있는 작업

**Characteristics.UNORDERED** 스트림 요소 순서 상관 없이 작업

**Characteristics.IDENTITY_FINISH** 위의 finisher()가 항등 함수 일경우

  • characteristics() 부분에 그냥 써주기만 하면 됨
  • 컬렉터가 수행하는 작업의 속성에 대한 정보를 제공하는 역할
  • Set반환

 

 


 

다음 주부터는 본 캠프가 시작이 되어선 배워야 할 것들이 많아지고, 또 어떻게 진행될지 아직 큰 틀을 알수 없는 미지의 계획이 있다.

 

계획이 없고 로드맵이 없는건 죽어도 싫지만,, 그래도 마음가짐을 좀 하면서 할 수 있도록 주말에 준비를 해 놓을 것.