2016-03-18 13 views
6

Dưới đây là kịch bản của tôi:Đúc một danh sách trong một hoạt động dòng

private List<Entity> getPlanets() { 
    return entities.values() 
        .stream() 
        .filter(x -> x instanceof Planet) 
        .collect(Collectors.toList()); 
} 
  • Entity là lớp siêu của Planet
  • thực thể là một HashMap<Entity>
  • Như phương pháp này được gọi là "getPlanets" Tôi sẽ giống như nó trả lại một List<Planet> nhưng có vẻ như tôi biểu thức luồng sẽ trả về một List<Entity>
  • Tôi đã cố gắng như vậy tôi đúc các biểu thức nhưng dường như không có gì phát triển.

Tôi đang đánh dấu thương hiệu mới với Java 8 luồng để có thể ai đó có thể chỉ ra những gì tôi đang thiếu? Cảm ơn!

Trả lời

8
return entities.values() 
       .stream() 
       .filter(x -> x instanceof Planet) 
       .map(x -> (Planet) x) 
       .collect(Collectors.toList()); 
+0

câu trả lời nhanh nhất từ ​​SO bao giờ hết! Cảm ơn :) – pitosalas

+0

@pitosalas - bạn có thể chấp nhận câu trả lời này nếu câu trả lời cho câu hỏi của bạn. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – nhylated

2

Một biến thể với sự tham khảo phương pháp:

return entities.values().stream() 
    .filter(Planet.class::isInstance) 
    .map(Planet.class::cast) 
    .collect(Collectors.toList()); 
Các vấn đề liên quan