【发布时间】:2016-03-08 10:23:33
【问题描述】:
我的问题是重复代码。我有 4 种方法,如下所示,一种用于名称,另一种用于登录等。所以唯一改变的是 getter(p.getName()、p.getLogin()...)。
private Set<Person> filterByName(Set<String> values, Set<Person> peeps){
Set<Person> filtered = new HashSet<>();
for (Person p : peeps){
if(isIn(p.getName(), values)){
filtered.add(p);
}
}
return filtered;
}
我在 switch 中调用这些方法:
switch(var){
case NAME:
filtered = filterByName(arg1, arg2);
case ...
如果不为每个 case 块实现方法,我该如何做到这一点?
我的想法是以某种方式告诉方法在case 块中使用正确的getter,因此只有一种方法用于所有过滤,例如
private Set<Person> universalFilter(Set<String> values, Set<Person> peeps) {
Set<Person> filtered = new HashSet<>();
for (Person p : peeps){
if(isIn(***SOMETHING CLEVER***, values)){
filtered.add(p);
}
}
return filtered;
}
【问题讨论】:
-
Java 的哪个版本?如果 8,这听起来像是 Predicate 的工作......或者如果小于 8,那么 Guava 也有 Predicate。