2017-11-21 15 views
3

firstNamelastNameの人がいない場合、コードにFriendNotFoundExceptionをスローする必要があります。 Streamで例外を捕捉することは可能ですか?ストリームでカスタム例外をスローします

今私はこのようなものがありますが、失敗しています。

@Override 
public Friend findFriend(String firstName, String lastName) throws FriendNotFoundException { 
    if (firstName == null || lastName ==null) { 
     throw new IllegalArgumentException("There are no parameters"); 
    } 
    if (friends.stream().filter(x -> !firstName.equals(x.getLastName()) && 
     (!lastName.equals(x.getLastName()))) != null); 
    { 
     throw new FriendNotFoundException(firstName, lastName); 
    } 

    return friends.stream().filter(
     x -> (firstName.equals(x.getFirstName())) && 
     (lastName.equals(x.getLastName()))).findAny().orElse(null);      
} 

答えて

5

答えは次のとおりです。

return friends.stream() 
      .filter(x -> (firstName.equals(x.getFirstName())) && 
      (lastName.equals(x.getLastName()))) 
      .findAny() 
      .orElseThrow(() -> new FriendNotFoundException(firstName, lastName)) 

コードを持っているところでよりエレガントな私の命題はこのような何かを行うことです。

Predicate<Person> firstNamePredicate = x -> firstName.equals(x.getFirstName()) 
Predicate<Person> lastNamePredicate = x -> firstName.equals(x.getLasttName()) 
return friends.stream() 
       .filter(firstNamePredicate.and(lastNamePredicate)) 
       .findAny() 
       .orElseThrow(() -> new FriendNotFoundException(firstName, lastName)) 
+1

を二つの述語を定義することはないと思いますコードを読みやすくします。しかし、冗長な括弧を削除することができます... – Holger

関連する問題