Java 8 如何从java流中提取对象列表?

Java 8 如何从java流中提取对象列表?,java-8,Java 8,请注意,此处有3个嵌套级别- 我正在尝试从filtersupergroup列表中的filtersubgroup列表检索筛选器列表。 筛选器有一个属性-fieldname。 我使用以下方法从数据结构中提取了字段名列表: public static List<String> extractFilterFieldsAsAList(QuerySearchRequestDTO requestDTO) { return requestDTO.getFilter().parallelStr

请注意,此处有3个嵌套级别- 我正在尝试从filtersupergroup列表中的filtersubgroup列表检索筛选器列表。 筛选器有一个属性-fieldname。 我使用以下方法从数据结构中提取了字段名列表:

public static List<String> extractFilterFieldsAsAList(QuerySearchRequestDTO requestDTO) {
    return requestDTO.getFilter().parallelStream()
            .map(new Function<FilterSuperGroup, String>() {
                @Override
                public String  apply(FilterSuperGroup filterSuperGroup) {

                    return filterSuperGroup.getFilterSubGroup().parallelStream()
                            .map(new Function<FilterSubGroup, String>() {
                                @Override
                                public String apply(FilterSubGroup filterSubGroup) {

                                    return filterSubGroup.getFilter().parallelStream()
                                            .map(new Function<Filter, String>() {

                                                @Override
                                                public String apply(Filter t) {
                                                    // TODO Auto-generated method stub
                                                    return t.getFieldName();
                                                }

                                            }).collect(Collectors.joining(" "));
                                }

                            }).collect(Collectors.joining(" "));
                }
            }).collect(Collectors.toList());
}
publicstaticlist提取器过滤器字段asalist(querySearchRequestdToRequestdTo){
返回requestDTO.getFilter().parallelStream()
.map(新函数(){
@凌驾
公共字符串应用(FilterSuperGroup FilterSuperGroup){
返回filterSuperGroup.getFilterSubGroup().parallelStream()
.map(新函数(){
@凌驾
公共字符串应用(筛选器子组筛选器子组){
返回filterSubGroup.getFilter().parallelStream()
.map(新函数(){
@凌驾
公共字符串应用(过滤器t){
//TODO自动生成的方法存根
返回t.getFieldName();
}
}).collect(收集器。连接(“”);
}
}).collect(收集器。连接(“”);
}
}).collect(Collectors.toList());
}
问题:但是,在另一个场景(下面)中,我需要一个列表作为输出。 我想用不会破坏流嵌套的东西替换findAny().get()。findAny().get()显然不正确,因为它只从每个嵌套返回一个元素。我该如何解决这个问题

public static List<Filter> prepareFilterListFromRequest(QuerySearchRequestDTO requestDTO) {
    List<Filter> listToReturn = new ArrayList<>();

    listToReturn.addAll(requestDTO.getFilter().stream()
            .map(new Function<FilterSuperGroup, List<Filter>>() {

                @Override
                public List<Filter> apply(FilterSuperGroup filterSuperGroup) {
                    return filterSuperGroup.getFilterSubGroup().parallelStream()
                            .map(new Function<FilterSubGroup, Filter>() {

                                @Override
                                public Filter apply(FilterSubGroup filterSubGroup) {
                                    // TODO Auto-generated method stub
                                    return  filterSubGroup.getFilter().stream()
                                            .map(new Function<Filter, Filter>() {

                                                @Override
                                                public Filter apply(Filter t) {
                                                    // TODO Auto-generated method stub
                                                    return t;
                                                }

                                            }).findAny().get();
                                }
                            }).collect(Collectors.toList());
                }
            }).findAny().get()
            );


    return listToReturn;
}
公共静态列表prepareFilterListFromRequest(querySearchRequestdToRequestdTo){
List listToReturn=新建ArrayList();
listToReturn.addAll(requestDTO.getFilter().stream())
.map(新函数(){
@凌驾
公共列表应用(筛选器超级组筛选器超级组){
返回filterSuperGroup.getFilterSubGroup().parallelStream()
.map(新函数(){
@凌驾
公共筛选器应用(筛选器子组筛选器子组){
//TODO自动生成的方法存根
返回filterSubGroup.getFilter().stream()
.map(新函数(){
@凌驾
公共过滤器应用(过滤器t){
//TODO自动生成的方法存根
返回t;
}
}).findAny().get();
}
}).collect(Collectors.toList());
}
}).findAny().get()
);
返回列表返回;
}

从现在开始使用:请用lambda表达式替换所有这些匿名内部类。使这些代码具有可读性正是它们被添加到语言中的原因。然后,我们有机会认识到代码在做什么…