繁体   English   中英

Java 按空字段排序对象列表

[英]Java order list of objects by null fields

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

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

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

例子:

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

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

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

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

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

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

您可以使用 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());

在这里阅读更多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM