如何将List转换为Optional <List>?

Pav*_*iuk 1 java optional java-8

我怎样才能转换ListOptional<List>

以下代码生成编译错误:

public Collection<Optional<UserMeal>> getAll() {

    Comparator comparator = new SortedByDate();
    List<UserMeal> mealList = new ArrayList<>(repository.values());
    Collections.sort(mealList,comparator);
    Collections.reverse(mealList);

    **List<Optional<UserMeal>> resultList = Optional.of(mealList);**

    return resultList;
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 8

Optional.of(mealList)返回一个Optional<List<UserMeal>>,而不是一个List<Optional<UserMeal>>.

为了得到想要的List<Optional<UserMeal>>,你应该换行的每个元素ListOptional:

List<Optional<UserMeal>> resultList = 
    mealList.stream()
            .map(Optional::ofNullable)
            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

注意我使用Optional::ofNullable和不使用Optional::of,因为后者会产生一个NullPointerExceptionif你的输入List包含任何null元素.