2
我有多個功能來篩選基於標準的對象的地圖。流和lambdas作爲參數
函數具有相同的主體,只有布爾傳遞條件會改變。
filterOnFirstCriteria(Criteria criterias, Map<Integer, List<Container>> containerMap, Map<Integer, ClassKey> classKeys) {
for (Map.Entry<Integer, List<Container>> entry : containerMap.entrySet()) {
List<Container> containers = entry.getValue();
ClassKey classKey = classKeys.get(entry.getKey());
for (Container container : containers) {
List<MyObject> found = new ArrayList<>();
for (MyObject myObject : container.getMyObjects()) {
boolean pass = criterias.getListOfFilter().stream().filter(s -> s.equals(container.getReference())).count() > 0;
if (pass) {
found.add(myObject);
}
}
container.getMyObjects().removeAll(found);
}
}
}
filterOnOtherCriteria(Criteria criterias, Map<Integer, List<Container>> containerMap, Map<Integer, ClassKey> classKeys) {
for (Map.Entry<Integer, List<Container>> entry : containerMap.entrySet()) {
List<Container> containers = entry.getValue();
ClassKey classKey = classKeys.get(entry.getKey());
for (Container container : containers) {
List<MyObject> found = new ArrayList<>();
for (MyObject myObject : container.getMyObjects()) {
boolean pass = myObject.getListOfObject().stream().filter(obj -> criterias.getLocations().stream().anyMatch(location -> location.equals(obj.getLocation()))).count() > 0;
if (pass) {
found.add(myObject);
}
}
container.getMyObjects().removeAll(found);
}
}
}
條件可以在來自上層環路的任何對象上。 我想將重複的循環代碼提取到一個函數中,但我不知道如何爲布爾條件傳遞某種回調。
謝謝。
傳遞一個附加斷言,其中上下文將包含所有必要的信息,謂詞來決定它應該返回true或false(即myObject的,容器,標準S)。 –