Java 将选项列表收集到包含当前选项的列表中
我试图重构一些代码,以返回一个选项列表,而不是一个可选的 我在班上有以下清单Java 将选项列表收集到包含当前选项的列表中,java,java-8,java-stream,collectors,Java,Java 8,Java Stream,Collectors,我试图重构一些代码,以返回一个选项列表,而不是一个可选的 我在班上有以下清单 private final List<Mapper<? extends Message>> mappers; 我在Optionals util中没有从多个列表中筛选当前选项的方法。如何在不更改util类的情况下执行相同的操作?Stream present=listofooptionals.Stream().filter(可选::isPresent); Stream<Optional<
private final List<Mapper<? extends Message>> mappers;
我在Optionals util中没有从多个列表中筛选当前选项的方法。如何在不更改util类的情况下执行相同的操作?Stream present=listofooptionals.Stream().filter(可选::isPresent);
Stream<Optional<T>> present = listOfOptionals.stream().filter(Optional::isPresent);
Stream<T> asTs = present.map(Optional::get);
// this is safe, because all remaining are present,
//convert Streams to Lists as usual with collect.
List<T> listTs = asTs.collect(Collectors.toList());
Stream asTs=present.map(可选::get);
//这是安全的,因为所有剩余的都存在,
//使用collect像往常一样将流转换为列表。
List listTs=asTs.collect(Collectors.toList());
由于无法正确理解您的问题,最好您也发布您的util类,同时查看我的操作:
private List<Message> mapToFeature() {
mappers.stream()
.map(mapper -> mapper.createFeature())
.flatMap(List::stream)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Optionals.toList());
私有列表映射功能(){
mappers.stream()
.map(映射器->映射器.createFeature())
.flatMap(列表::流)
.filter(可选::isPresent)
.map(可选::get)
.collect(Optionals.toList());
}收集
可选的流到仅包含当前值的列表中:
List<Optional<String>> someStrings = ...;
List<String> allPresentStrings = someStrings.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList());
列出一些字符串=。。。;
列出allPresentStrings=someStrings.stream()
.flatMap(可选::流)
.collect(Collectors.toList());
您指的是什么util类?它是一个内部util包public static collector,我仍然不明白。您不想对这个util类/包进行任何更改,但我不知道从您在问题中发布的内容中包含了什么。此外,上面还显示了两个相同的映射器
接口。为什么要将该接口更改为返回列表
?为什么不将界面更改为合理的界面,比如只返回List
,而不返回空选项?因此,让收集这些结果的代码跳过null
,而不是将其包装。
Stream<Optional<T>> present = listOfOptionals.stream().filter(Optional::isPresent);
Stream<T> asTs = present.map(Optional::get);
// this is safe, because all remaining are present,
//convert Streams to Lists as usual with collect.
List<T> listTs = asTs.collect(Collectors.toList());
private List<Message> mapToFeature() {
mappers.stream()
.map(mapper -> mapper.createFeature())
.flatMap(List::stream)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Optionals.toList());
List<Optional<String>> someStrings = ...;
List<String> allPresentStrings = someStrings.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList());