Concatenate Optional Lists

后端 未结 3 1413
不思量自难忘°
不思量自难忘° 2021-01-14 10:49

I have three Optional> which have to be combined and returned. I tried to use Optional.map() and flatmap() but was not successful.

         


        
3条回答
  •  没有蜡笔的小新
    2021-01-14 11:10

    It gets easier when you use a stream:

    return Stream.of(entity1, entity2, entity3)
            .filter(Optional::isPresent)
            .map(Optional::get)
            .flatMap(List::stream)
            .collect(Collectors.collectingAndThen(Collectors.toList(), Optional::of));
    

    Important to note that this optional won't ever be empty. It will contain at least an empty list, which defeats the purpose of using optionals. When using Collection types as return types, Optional are not really used because it's recommended to return an empty collection where an empty optional would be used.

    So I would just change the method's return type to List and let the stream return an empty list when no input optional is present.

提交回复
热议问题