我们如何从ArrayList
中过滤掉我们知道内部类型类,类成员(Field
)及其值的单个对象?
伪码:
class MyType {
public String TITLE;
public int ID;
}
ArrayList<MyType> myArray; // filled with data
function findRowByColumnValue(ArrayList<T> array, Field column, Object compareValue){
// list all members of "array"
// and compare the inner field "column" to "compareValue"
}
// called like this
findRowByColumnValue(myArray, MyType.class.getField("ID"), 2);
答案 0 :(得分:1)
这是一个通用方法,除了传入 name 字段而不是Field
本身之外,它可以执行您想要的操作,因为您可以确保字段和类对齐。考虑一个列表,其中包含不同类的实例,每个类都是MyClass类型(但可能是子类) - 每个类可以为给定的列名使用不同的字段。
static <T> List<T> findRowByColumnValue(List<T> array, String column, Object compareValue){
List<T> hits= new ArrayList<T>();
for (T element : array) {
if (element != null && compareValue.equals(
element.getClass().getField(column).get(element))
hits.add(element);
}
return hits;
}
您可以通过为给定的类等缓存字段来进行优化,但除非您注意到性能问题,否则我最初不会。