根据属性值查询第一次/最后一次出现的索引
public static void main(String[] args) {
List<User> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setName("test"+i);
list.add(user);
}
User user = new User();
user.setName("test"+1);
list.add(user);
int index = queryLastIndexByAttribute(list, "name", "test"+11);
System.out.println(index);
}
public static <T> int queryIndexByAttribute(List<T> source,String fieldName,Object matchValue){
if (source ==null||source.size()==0){
return -1;
}
for (int i = 0; i < source.size(); i++) {
T t = source.get(i);
Class<?> aClass = t.getClass();
try {
Field field = aClass.getDeclaredField(fieldName);
field.setAccessible(true);
Object o = field.get(t);
if (o.equals(matchValue)){
return i;
}
} catch (IllegalAccessException | NoSuchFieldException e) {
e.printStackTrace();
}
}
return -1;
}
public static <T> int queryLastIndexByAttribute(List<T> source,String fieldName,Object matchValue){
if (source ==null||source.size()==0){
return -1;
}
for (int i = source.size()-1; i >= 0; i--) {
T t = source.get(i);
Class<?> aClass = t.getClass();
try {
Field field = aClass.getDeclaredField(fieldName);
field.setAccessible(true);
Object o = field.get(t);
if (o.equals(matchValue)){
return i;
}
} catch (IllegalAccessException | NoSuchFieldException e) {
e.printStackTrace();
}
}
return -1;
}