複数の動的フィルター条件に基づいてリストからオブジェクトをフィルターする必要があるという要件があります。フィルター条件が複数で動的に来る場合のフィルターオブジェクト
オブジェクトをループしてすべてのフィルタを行い、条件が一致しない場合はfalseを返してコードを記述しました。私が書いたコードは
Map<String, String> obj1 = new HashMap<>();
obj1.put("id", "1");
obj1.put("name", "name1");
obj1.put("dept", "IT");
obj1.put("sex", "M");
Map<String, String> obj2 = new HashMap<>();
obj2.put("id", "2");
obj2.put("name", "name2");
obj2.put("dept", "IT");
obj2.put("sex", "M");
Map<String, String> obj3 = new HashMap<>();
obj3.put("id", "3");
obj3.put("name", "name3");
obj3.put("dept", "DEV");
obj3.put("sex", "F");
ArrayList<Map<String, String>> employees = new ArrayList<>(Arrays.asList(obj1,obj2,obj3));
Map<String, String> filterCondition = new HashMap<>();
filterCondition.put("dept", "IT");
filterCondition.put("sex", "M");
List<Map<String, String>> filteredEmployee = new ArrayList<>();
for(Map<String,String> employee:employees){
if(isValid(filterCondition, employee)){
filteredEmployee.add(employee);
}
}
System.out.println(filteredEmployee);
isValidメソッドとしてである私が取得していますフィルタを動的に来ている場合は、それを達成するための任意のより良い方法はあり
private static boolean isValid(Map<String, String> filterCondition, Map<String, String> employee) {
for(Entry<String, String> filterEntry:filterCondition.entrySet()){
if(!employee.get(filterEntry.getKey()).equals(filterEntry.getValue())){
return false;
}
}
return true;
}
ようです。
は、私はすでにhereとしてstackoverflowの中にいくつかの答えを見てきましたが、無助けを借りて
は、Java 8を使用していますか? – AjahnCharles
私はそれを使うことができます。しかし、ストリームフィルタを使用しても、私は解決策をこれ以上よく考えることができません。 – Roshan
解決策ではありませんが、潜在的なNPEを避けるために条件を変更します: 'if(!filterEntry.getValue()。equals(employee.get(filterEntry.getKey())))' –