Java 8: Lambda-Streams, Filtrowanie według metody z wyjątkiem
Mam problem z wypróbowaniem wyrażeń Lambda Java 8. Zazwyczaj działa dobrze, ale teraz mam metody, które rzucająIOException
jest. Najlepiej jest spojrzeć na następujący kod:
class Bank{
....
public Set<String> getActiveAccountNumbers() throws IOException {
Stream<Account> s = accounts.values().stream();
s = s.filter(a -> a.isActive());
Stream<String> ss = s.map(a -> a.getNumber());
return ss.collect(Collectors.toSet());
}
....
}
interface Account{
....
boolean isActive() throws IOException;
String getNumber() throws IOException;
....
}
Problem polega na tym, że nie kompiluje się, ponieważ muszę wychwycić możliwe wyjątki metod isActive- i getNumber-Methods. Ale nawet jeśli jawnie użyję try-catch-Block, jak poniżej, nadal się nie kompiluje, ponieważ nie łapię wyjątku. Więc albo jest błąd w JDK, albo nie wiem jak złapać te Wyjątki.
class Bank{
....
//Doesn't compile either
public Set<String> getActiveAccountNumbers() throws IOException {
try{
Stream<Account> s = accounts.values().stream();
s = s.filter(a -> a.isActive());
Stream<String> ss = s.map(a -> a.getNumber());
return ss.collect(Collectors.toSet());
}catch(IOException ex){
}
}
....
}
Jak mogę to zrobić? Czy ktoś może wskazać mi właściwe rozwiązanie?