stream 내부에서 객체 다운캐스팅
리스트에 Product객체를 저장했는데 Product를 상속받는 TV라는 객체가 저장되어 있었다.
이 리스트를 탐색하면서 TV 객체 중 특정 속성을 갖는 TV만을 리스트로 만들어 반환하고 싶다.
public List<Product> findTVByInch(int inch) {
// TODO Auto-generated method stub
List<Product> result = new ArrayList<>();
for (Product product : products) {
if (product.getType().equals("TV")) {
TV t = (TV) product;
if (t.getInch() >= inch)
result.add(t);
}
}
return result;
}
위와 같이 구현할 수 있을 것이다. 하지만 코드가 길어 stream을 이용해 간결하게 처리할 방법이 없을까 생각을 했다.
그렇지만 Product 객체를 저장하는 리스트에서 TV의 속성에 접근할 방법이 없기때문에 Product 객체를 TV로 다운캐스팅을 해야했다.
하지만 내가 아는 방식으로는 다운캐스팅을 하지 못하고 계속 에러가 났다. 그래서 결국 forEach로 해결을 했는데 다른 방법이 있었다.
스트림 내부의 객체를 변경하기 위해서 쓰는 api가 map이라는 사실을 알게되어 문제를 해결했다.
public List<Product> findTVByInch(int inch) {
List<Product> result = products.stream().filter(p->p.getType().equals("TV"))
.map(p -> (TV) p)
.filter(r -> r.getInch() >= inch)
.collect(Collectors.toList());
return result;
}
Author And Source
이 문제에 관하여(stream 내부에서 객체 다운캐스팅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@estry/stream-내부에서-객체-다운캐스팅저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)