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

标签 java sorting comparator inner-classes

考虑到 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

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

Collections.sort(list, Comparator.comparing(OuterClass::getField01));

但是我可以按 InnerClass.innerfield.innerfield01 排序吗? ?我试过了

Collections.sort(list, Comparator.comparing(OuterClass::InnerField::innerField01));

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

最佳答案

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

Collections.sort(list, 
  Comparator.comparing(OuterClass::getInnerField, 
    Comparator.comparingInt(InnerClass::getInnerField01)));

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

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

关于使用比较器和内部类进行 Java 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51686468/

相关文章:

java - 字符串的正确日期格式

python - 如何在 Python 中就地对整数数组进行排序?

java - 泛型、比较器和 Map 排序时出现问题

java - 从 Java 内部处理 Python IO

java - 避免多重if的设计模式

arrays - 按递减或递增顺序按数字字段对数组 Angular 7 进行排序

javascript - 根据键值对对象数组进行排序或排序

java - Java中的自然排序顺序字符串比较 - 是内置的吗?

java - Hibernate 中的 Order.asc(<String>) 和 Comparable 接口(interface)中的 "compareTo"行为是否相同?

java - Maven 依赖版本