public static List<Position> getPositionsByXAxis(XAxis xAxis) {
return Arrays.stream(YAxis.values())
.map(yAxis -> Position.from(xAxis, yAxis))
.collect(Collectors.toList());
}
스트림을 다루다보면 리스트로 반환하기 위해 collect(Collectors.toList())
를 많이 쓴다.
이펙티브 자바에도 아이템 47. 반환 타입으로는 스트림보다 컬렉션이 낫다가 있다.
모던자바인액션 6장을 읽다보면 초반부에 collect, collector, collectors
를 잘 구분하라는 말이 나온다. 의식적으로 구분하기 전에는 Collectors.toList()
도 리스트를 반환하니 막연하게 Collection
과 직접적 연관이 있는 것인줄 알았다.
Collector
를 구현한 클래스들을 제공한다.위의 그림이 잘 요약해서 보여준다.
Collectors.toList()
Collector
를 반환하는 것을 알 수 있다. 그래서 collect(Collectors.toList())
를 하면 collect
메서드에 collector
인터페이스가 들어가는 것이다.
Collector
는 인터페이스로 다섯가지가 정의도ㅣ어 있다.
애초에 Collection은 Iterable
을 상속받는 인터페이스고, Collections는 Object
를 상속받는 클래스다. Collections는 Collection을 리턴하거나, Collection 인터페이스에서 동작하는 메소드를 모아놓은 클래스다.
명사 단수형은 인터페이스이고, 거기에 복수형을 붙이면 구체클래스가 되는 것이 컨벤션인지.
오 몰랐던 내용인데 감사합니다 👍