请注意,这里有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;
}