使用比较器和内部类进行 Java 排序

don*_*nea 0 java sorting inner-classes comparator

鉴于 Java 类的这种组合:

public class OuterClass
    {
        public String           field01;
        public int              field02;
        public InnerClass       innerField
        // ...getters, setters

    public class InnerClass
        {
            public int              innerField01;
            public BigDecimal       innerField02;
            // ...getters, setters
Run Code Online (Sandbox Code Playgroud)

我想按外部和内部字段对它们进行排序。现在,给定 a List<OuterClass> list,我可以轻松地对其进行排序,例如field01

Collections.sort(list, Comparator.comparing(OuterClass::getField01));
Run Code Online (Sandbox Code Playgroud)

但我可以按哪种方式排序InnerClass.innerfield.innerfield01呢?我试过

Collections.sort(list, Comparator.comparing(OuterClass::InnerField::innerField01));
Run Code Online (Sandbox Code Playgroud)

以及其他一些方法,但都没有成功。也许我应该以某种方式使用OuterClass::new,但我不知道如何使用。

Rob*_*per 5

您可以像这样使用Comparator.comparing(Function, Comparator) :

Collections.sort(list, 
  Comparator.comparing(OuterClass::getInnerField, 
    Comparator.comparingInt(InnerClass::getInnerField01)));
Run Code Online (Sandbox Code Playgroud)

第一个参数是用于提取要排序的键的函数。在你的情况下:Innerfield来自OuterClass.

第二个参数是用于比较排序键的比较器。在您的情况下: a代表(在上例中)Comparator的字段之一。InnerFieldinnerField01