简体   繁体   English

如何将列表转换为列表<Optional> ?

[英]How to convert a List to List<Optional>?

How can I convert a List to List<Optional> ?如何将List转换为List<Optional>

The following code produces a compilation error :以下代码产生编译错误:

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;
}

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

To get the desired List<Optional<UserMeal>> , you should wrap each element of the List with an Optional :要获得所需的List<Optional<UserMeal>> ,您应该用Optional包装List每个元素:

List<Optional<UserMeal>> resultList = 
    mealList.stream()
            .map(Optional::ofNullable)
            .collect(Collectors.toList());

Note I used Optional::ofNullable and not Optional::of , since the latter would produce a NullPointerException if your input List contains any null elements.注意我使用Optional::ofNullable而不是Optional::of ,因为如果您的输入List包含任何空元素,后者会产生NullPointerException

Simple conversion of mealList to Optional mealList 到 Optional 的简单转换

Optional.ofNullable(mealList) Optional.ofNullable(mealList)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM