我有一个字符串映射图。此映射是对json对象的解析,并表示用户输入的用于在UI中过滤列表的条件。 在剩下的服务中,我想用来自这张地图的数据填充一个对象。不幸的是我不能改变queryModel对象。查询模型对象有一个过滤器列表。每个过滤器都有一个字段列表和一个应用于该字段的操作列表。我的目标是转换下面的代码与Java 8流。学习java流,如何通过函数方式将外部循环的值传递给嵌套循环
for(Map.Entry<String,Map<String,String>> entry: filters.entrySet()) {
Filter filter = new Filter();
filter.setFields(new ArrayList<String>());
filter.getFields().add(entry.getKey());
filter.setValues(new ArrayList<String>());
filter.setOperators(new ArrayList<String>());
if (entry.getValue() != null) {
for(String key : entry.getValue().keySet()) {
if(key.equals("value")) {
filter.getValues().add(entry.getValue().get(key));
}
else if(key.equals("matchMode")){
filter.getOperators().add(entry.getValue().get(key));
}
}
queryModel.getFilters().add(filter);
}
正如你可以看到我先在字段列表设置字段的名称,然后在值那场我环路获得输入值和匹配模式。在函数中,我不知道要保存外循环的字段,以便将其设置在内循环中创建的过滤器对象中。 这是我尝试
public static Filter getFilter(Map.Entry<String,String> entry) {
Filter filter = new Filter();
filter.setFields(new ArrayList<String>());
filter.getFields().add(entry.getKey());
filter.setValues(new ArrayList<String>());
filter.setOperators(new ArrayList<String>());
if(entry.getKey().equals("value")) {
filter.getValues().add(entry.getValue());
}
else if(entry.getKey().equals("matchMode")){
filter.getOperators().add(entry.getValue());
}
return filter;
}
List<Filter> filterList = filters.entrySet().stream()
.filter(stringMapEntry -> stringMapEntry.getValue() != null)
.flatMap(entry -> entry.getValue().entrySet().stream())
.map (innerEntry-> QueryModelAdapter.getFilter(innerEntry))
.collect (Collectors.toList());
queryModel.setFilters (filterList);
我QueryModelAdapter.getFilter需要的平面地图的入口。我怎样才能做到这一点?
“编写代码为我”的问题是题外话了SO。如果您使用代码描述问题并描述您的预期,则帮助起来会更容易。什么是“过滤器”? – 4castle