[Java] Stream sort 문제 해결

박철현·2023년 5월 11일
0

문제해결

목록 보기
4/17
  • 문제점 : Stream 활용하던 중 메서드를 활용할 수 없는 문제

  • 원인 : 제네릭, Stream 사용의 미숙함

    • 제너릭 사용 : 컴파일에는 타입 검사, 런타임 시에는 타입 소거 -> 해당 정보를 알 수 없음
    • 제네릭은 자바 5에서 생김 -> 기존 코드도 돌아가게 하기 위해 아래와 같이 도입
      -> 타입 매개변수의 경계가 없는 경우에는 Object로, 경계가 있는 경우 경계 타입으로 타입 파라미터 변경
      -> 문제가 있던 코드에서는 경계를 설정하지 않아 런타임 시 Object로 동작하여 발생한 문제
    • 형변환을 무조건 해야 하나 제네릭이 해결해준다면 하지 않아도 됨
      -> 일단 적고 빨간색 뜨면 형변환 명시해도 됨
  • 문제였던 코드 : a.get 메서드가 실행이 안됐었으나, 명시적 형변환을 통해 해결

  • 해결 전 : getFromMember()에 빨간글씨

People = People.stream()
.sorted(Comparator.comparingInt(a -> a.getFromMember().getToPeople().size())
.thenComparing(a -> a.getCreateDate()))
.collect(Collectors.toList());
  • 해결 후 : 타입 명시로 해결
People = People.stream()
.sorted(Comparator.comparingInt((person)a -> a.getFromMember().getToPeople().size())
.thenComparing(a -> a.getCreateDate()))
.collect(Collectors.toList());
profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글