问题遇到的现象和发生背景
最近学完反射,刚开Lambda,于是想用反射的同时用Comparator对Arraylist排列,但发现无法正常运行。
问题相关代码,请勿粘贴截图
class TestLambda{
public String name;
public int age;
public TestLambda(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "TestLambda{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Lambda {
public static void main(String[] args) throws Exception {
//利用反射读取类
Class cls=Class.forName("learn.Java8.TestLambda");
//生成对应构造器
Constructor constructor=cls.getDeclaredConstructor(String.class,int.class);
List list=new ArrayList();
Scanner in=new Scanner(System.in);
//i用来标记for循环
int i=in.nextInt();
//name和age便于生成对象
String name;
int age;
for (; i >0 ; i--) {
name=in.next();
age=in.nextInt();
list.add(constructor.newInstance(name,age));
}
//生成Comparator,应该就是这里错了
Comparator comparator =(Object obj1,Object obj2) ->{
try {
obj1=constructor.newInstance(String.class,int.class);
obj2=constructor.newInstance(String.class,int.class);
Field field1=cls.getDeclaredField("age");
//对age进行排列,使age小的排在前面
return Integer.compare((int)field1.get(obj1),(int)field1.get(obj2));
} catch (Exception e) {
}
//这里不加return 0无法通过,求大佬优化
return 0;
};
Collections.sort(list,comparator);
Method method=cls.getMethod("toString");
for (int j = 0; j < list.size(); j++) {
System.out.println(method.invoke(list.get(j)));
}
}
}
运行结果及报错内容
无法正常排序,运行结果输出顺序与加入list顺序相同
我的解答思路和尝试过的方法
应该是Comparator哪里错了
我想要达到的结果
按照age从小到大排序