Java8对多个对象进行排序 公共B类{ 私有字符串名称; 私有字符串值; //二传手 } 公共C类{ 私有字符串名称; 私有字符串值; //setter和Get方法 } D类公共服务{ 私有字符串名称; 私有字符串值; //二传手 } 公共A类{ 私人B,; 私人C C; 私家侦探; //二传手 } 公开课范例{ 列表a=新数组列表(); //假设a将包含类B、C和D的对象 排序(Comparator.comparing(a::getB().getName)。然后比较(a::getC().getName)); }

Java8对多个对象进行排序 公共B类{ 私有字符串名称; 私有字符串值; //二传手 } 公共C类{ 私有字符串名称; 私有字符串值; //setter和Get方法 } D类公共服务{ 私有字符串名称; 私有字符串值; //二传手 } 公共A类{ 私人B,; 私人C C; 私家侦探; //二传手 } 公开课范例{ 列表a=新数组列表(); //假设a将包含类B、C和D的对象 排序(Comparator.comparing(a::getB().getName)。然后比较(a::getC().getName)); },java,sorting,java-8,Java,Sorting,Java 8,从一个pojo对字段进行排序,然后按下一个pojo对字段进行排序。 需要了解在这种情况下如何排序。我们能用吗 Comparator.comparing()在本例中?您不能使用这样的方法引用,但可以使用lambda表达式: public class B { private String name; private String value; //Setters and Get }

从一个pojo对字段进行排序,然后按下一个pojo对字段进行排序。 需要了解在这种情况下如何排序。我们能用吗
Comparator.comparing()在本例中?

您不能使用这样的方法引用,但可以使用lambda表达式:

   public class B {
              private String name;
              private String  value;

             //Setters and Get
       }        
       public class C {
             private String name;
             private String  value;
        //Setters and Get Methods
       }
        public class D {
             private String name;
             private String  value;
             //Setters and Get
        }
        public class A {
              private B b;
              private C c;
              private D d;
            // Setters and Get
         }
        public class  Example{
          List<A> a = new Array List<A>();
            //Lets assume a  will contain objects of class B, C and D
           a .sort( Comparator.comparing(A::getB().getName).thenComparing(A::getC().getName));

         }

1) x.getB().getName()--x应该被类型转换为A类吗?2) A类应该实现比较器吗?我得到了java.lang.ClassCastException:java.lang.Class无法强制转换为java.lang.Comparable您需要
Comparator.Comparating((A x)->x.getB().getName())。然后比较(x->x.getC().getName())
,因为类型推断有限@用户3233289用您在问题中发布的内容不可能获得
ClassCastException
。谢谢!。那有帮助
a.sort(Comparator.comparing((A x) -> x.getB().getName())
                 .thenComparing(x -> x.getC().getName()));