空のコレクションを持つJavaオプションorElseThrow

gariaable:

私はコレクションを使用したストリーム実装していますlistOfFooをバーインスタンスの値を取得するには、そのリスト内のすべての項目のIDを取得し、それらを使用します。

私は、このメソッドがスローになることを確実にしたいと思いますResourceNotFoundExceptionをバーのリストにはアイテムが存在しない場合には、リストバーがnullであり、それは空のリストが含まれているので、それは、ない場合は、現在の状態で、それはチェックしますが、。

あなたは助け私を喜ばといくつかのソリューションを提案してもらえますか?

List<Bar> bars = Optional.ofNullable(
           listOfFoos.stream()
           .map(Foo::getId)                                         
           .map(fooId -> service.getBars(fooId))                                            
       .filter(Objects::nonNull)
       .collect(Collectors.toList()))                            
       .orElseThrow(() -> new ResourceNotFoundException(Bar.class, OBJECT_NULL));
また:

ただ、追加Optional.filter、それのために。:あなたは、としてそれを行うことができます

List<Bar> bars = Optional.ofNullable(
        listOfFoos.stream().map(fooId -> service.getBars(fooId))
                .filter(Objects::nonNull).collect(Collectors.toList()))
        .filter(a -> !a.isEmpty())
        .orElseThrow(() -> new ResourceNotFoundException(Bar.class, OBJECT_NULL));

脇:コード内で共有実装することにより、ストリームから返されたリストができなかったnullので、Optional.ofNullableおそらく置き換えることができますOptional.of

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222785&siteId=1