Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将选项列表收集到包含当前选项的列表中_Java_Java 8_Java Stream_Collectors - Fatal编程技术网

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());