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

时间:2018-08-03 06:39:40

标签: java-8

请注意,这里有3个嵌套层- 我正在尝试从filtersupergroup列表中的filtersubgroup列表中检索过滤器列表。 过滤器具有属性-字段名。 我设法使用以下方法从数据结构中提取了字段名称列表:

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

问题:但是,在另一种情况下(下),我需要一个列表作为输出。 我想用不会破坏流嵌套的东西替换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;
}

0 个答案:

没有答案