У меня проблема с использованием лямбда-выражений Java 8.
Обычно он работает нормально, но теперь у меня есть методы, которые бросают IOException
.
Лучше всего, если вы посмотрите на следующий код:
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;
....
}
Проблема в том, что она не компилируется, потому что я должен уловить возможные исключения из isActive- и getNumber-Methods. Но даже если я явно использую блок try-catch, как показано ниже, он все равно не компилируется, потому что я не поймаю Exception. Таким образом, есть либо ошибка в JDK, либо я не знаю, как поймать эти Исключения.
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){
}
}
....
}
Как я могу заставить его работать? Может кто-нибудь подскажет мне правильное решение?