【问题标题】:Java order list of objects by null fields按空字段排列的 Java 对象顺序列表
【发布时间】:2020-10-04 11:47:08
【问题描述】:

我有一个对象列表,例如学生。学生有名字、中间名和姓氏。 `

为了这个例子的目的,假设每个字段都可以为空。我想对列表进行排序,以便将所有空字段移到列表末尾,并将所有非空字段移到顶部。

我不需要根据实际的非空值进行排序。

例子:

[
    Harry, John, Carter,
    Tony, Thomas, Holmes,
    John, null, Chavez,
    null, Micharl, Heinz,
    null, null, Simpson,
    null, null, null
]

是否可以有一个比较器来实现这一点,还是我需要单独的比较器?

【问题讨论】:

  • 我希望你的老师分配了名字,中间和姓氏。真实姓名比这复杂得多。
  • 所以你想将Student对象分解到它们的字段中,移动列表末尾的null字段,在末尾有一堆无意义的null值?或者您想对学生列表进行排序,将with null 字段的学生移到最后?那么,有一些空字段和一些非空字段的学生会怎样呢?

标签: java sorting collections null comparator


【解决方案1】:

您可以创建一个函数来获取学生的所有信息并根据信息确定优先级并返回优先级值。

  • 如果所有字段不为空 - 优先级值为 1
  • 如果所有字段为空 - 优先级值为 3
  • 其他情况 - 优先级值 2

然后使用比较器按优先级值排序

studentList.sort(Comparator.comparing(s -> getPriority(s)));

【讨论】:

    【解决方案2】:

    您可以使用 Guava(Google 的 Java 核心库):

    List<Integer> toSort = Arrays.asList(3, 5, 4, null, 1, 2);
    Collections.sort(toSort, Ordering.natural().nullsLast()); // sorting nulls last
    assertThat(toSort.get(toSort.size() - 1), nullValue());
    

    阅读更多here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 2021-07-05
      • 1970-01-01
      相关资源
      最近更新 更多