我有一些 Java 代码可以根据一些输入过滤列表。它目前使用 lambda,例如:
public List<ComplexObject> retrieveObjectsFilteredByTags(List<String> allowedTags) {
List<ComplexObject> complexObjects = retrieveAllComplexObjects();
return complexObjects
.stream()
.filter( compObject -> allowedTags.contains(compObject.getTag()))
.collect(Collectors.toList());
}
我想要做的是将过滤器逻辑移动到另一种方法,使其可重用且易于单元测试。所以我想使用方法引用来代替传递给过滤器方法的 lambda。如果过滤器逻辑是相当静态的(即允许的标签列表在编译时已知),则很容易做到,但我无法弄清楚如何使用过滤器中的动态数据来做到这一点。
我想要的是某种使用方法引用然后传递第二个动态参数的方法,即
public List<ComplexObject> retrieveObjectsFilteredByTags(List<String> allowedTags) {
List<ComplexObject> complexObjects = retrieveAllComplexObjects();
return complexObjects
.stream()
.filter(this::filterByAllowedTags, allowedTags)
.collect(Collectors.toList());
}
那么有没有可能做我想做的事,或者我可能错误地处理了这种情况?