我有一個字符串映射圖。此映射是對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