当前位置: 首页 > 知识库问答 >
问题:

Java按空字段排序的对象列表

微生慈
2023-03-14

我有一个物品清单,比如学生。学生有名字、中间名和姓氏`

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

我不需要基于实际的非空值进行排序。

例子:

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

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

共有2个答案

颜宸
2023-03-14

你可以使用Guava(谷歌的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());

在这里阅读更多。

江琦
2023-03-14

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

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

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

studentList.sort(Comparator.comparing(s -> getPriority(s)));
 类似资料:
  • 问题内容: 我有一个Java对象列表,希望根据多个字段进行排序。 是否可以使用或接口根据多个字段对列表进行排序?我看到的所有示例仅根据一个领域进行排序。换句话说,可以按“校园”或“教师”或“建筑”进行排序。我想按“校园”,“教师”,“建筑”(因为它在SQL中存在)进行排序 问题答案: 您的比较器如下所示: 基本上,只要到目前为止已比较的属性相等(),它就会继续比较类的每个连续属性。

  • 问题内容: 如何按其字段之一(例如或)对对象数组进行排序? 问题答案: 使用usort,这是从手册改编而成的示例: 您还可以将任何callable用作第二个参数。这里有些例子: 使用匿名函数(来自PHP 5.3) 从班级内部 使用箭头函数(来自PHP 7.4) 另外,如果要比较数字值,则应使用“比较”功能。

  • 问题内容: 我有一个从排序的csv创建的以下列表 我实际上想按两个条件对列表进行排序:首先按字段1中的值,然后按字段2中的值。我该怎么做? 问题答案: 像这样:

  • 我下面的代码不起作用,我也不知道为什么。 它编译得很好,但结果似乎没有排序。

  • 我最近开始编程,所以这可能会变得很容易。我在排序我的对象时遇到了困难。我有一个带有姓名、出生日期和电话号码的对象。就像Object[0][0]="John"Object[0][1]="10/10/2010"Object[0][0]="900000000"与其他几个人一样。所以我的困难是按姓名排序并保留出生日期和电话号码以及姓名。谢谢。

  • 我必须创建一个方法,根据电子邮件按字母顺序排序对象的ArrayList,然后打印排序后的数组。我对它排序有困难的部分。我已经研究过它,并尝试使用,但这对我不起作用。我需要一种叫做比较器的东西,但不知道它是如何工作的。我必须使用这些,或者像气泡排序或插入排序之类的东西可以用于这种事情吗? 这是我目前掌握的代码: