如何将Optional<List<Integer>>转换为Optional<ArrayList<Integer>>
解决Optional<List>转Optional<ArrayList>的问题
你之前的写法错误在于直接将Optional对象传入ArrayList的构造器,而ArrayList的构造器只接受Collection类型的参数,不是Optional。正确的做法是先从Optional中提取内部的List,再将其转换为ArrayList,最后重新包装成Optional。
正确转换代码
Optional<List<Integer>> listOne = someAPI.call(); // 使用map方法转换内部元素类型 Optional<ArrayList<Integer>> listTwo = listOne.map(ArrayList::new);
或者用lambda表达式的等价写法:
Optional<ArrayList<Integer>> listTwo = listOne.map(list -> new ArrayList<>(list));
原写法错误原因
- 第一种写法
new ArrayList<>(listOne):listOne是Optional<List<Integer>>类型,并非Collection,构造器参数类型不匹配,编译报错。 - 第二种写法
Optional.of(new ArrayList(listOne)):同样是把Optional对象传给ArrayList构造器,构造器不接受该类型,导致编译错误。
内容的提问来源于stack exchange,提问作者DATATruejji
相关产品推荐
相关产品推荐

