私は文字列のマップのマップを持っています。このマップは、jsonオブジェクトの解析であり、ユーザーがUIでリストをフィルタリングするために入力した条件を表します。 私はこのマップからのデータでオブジェクトを設定したい残りのサービスです。残念ながら、私はqueryModelオブジェクトを変更することはできません。 Query Modelオブジェクトにはフィルタのリストがあります。各フィルターには、フィールドのリストとフィールドに適用される操作のリストがあります。私の目標は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);
}
あなたは、私が最初に入力された値と一致モードを取得するための値でそのフィールドIループのために、その後フィールドリスト内のフィールドの名前を設定すると見ることができるように。機能的には、外側のループのフィールドを保存して内側のループで作成されたフィルタオブジェクトに設定することはわかりません。私はQueryModelAdapter.getFilterにフラットマップのエントリを必要とする私の試み
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);
た 。どうやってやるの?
として、それを命名「私のためのコードを書く」の質問には、SOのためにオフトピックです。コードの問題と予想した内容の説明を記述すると、助けがはるかに簡単になります。 'フィルタ'とは何ですか? – 4castle