0
我正在搞亂lambdas,我試圖創建一個通用的方法來形成一個字段上的類的謂詞。這裏有一些代碼來說明:在字段上使用謂詞來查詢
public class A {
private String b;
private String c;
public A(String b, String c) {
this.b = b;
this.c = c;
}
public String getB() {
return b;
}
public String getC() {
return c;
}
}
public class Main {
public static void main(String[] args) {
List<A> list = Arrays.asList(new A("aa","bb"),new A("aaC","bb"));
Test test = new Test();
test.setList(list);
test.createPred("aa");
}
}
public class Test {
private List<A> list;
public void setList(List<A> list) {
this.list = list;
}
public Predicate<A> createPred(String query) {
return new Predicate<A>() {
@Override
public boolean test(A t) {
return t.getB().equals(query);
}
};
}
public List<A> search(Predicate<A> a) {
return list.stream().filter(a).collect(Collectors.toList());
}
}
我該如何編寫createPred,以便它可以佔用一個字段?我想要的方法是「字段通用」我想。我猜在這裏使用java反射不是一個好主意。
難道你不能只是將它作爲'createPred'中的一個參數傳遞並在你的''new Predicate''中使用它? – Nathan
反思似乎是唯一可能的方式,是的,使用反思通常不是一個好主意(大多數我通過反思實現的「和藹可親」的想法最終在問題和維護上比在節省的輸入方面花費更多)。 – SJuan76
如果我找到你的話,你可以在這裏使用'Function '。把它放到你的方法中,然後用't - > t.getB()'來調用方法,例如'createPred(「...」,t - > t.getB());'。這將允許您將任何A字符串字段賦予測試方法。 –