我有一个物品清单,比如学生。学生有名字、中间名和姓氏`
假设在本例中,每个字段都可以为空。我想对列表进行排序,以便将所有空字段移到列表的末尾,并将所有非空字段移到列表的顶部。
我不需要基于实际的非空值进行排序。
例子:
[
Harry, John, Carter,
Tony, Thomas, Holmes,
John, null, Chavez,
null, Micharl, Heinz,
null, null, Simpson,
null, null, null
]
有可能只有一个比较器来实现这一点,还是我需要单独的比较器?
你可以使用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());
在这里阅读更多。
您可以创建一个函数,该函数接收学生的所有信息,并根据信息确定优先级并返回优先级值。
然后使用比较器按优先级值排序
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,然后打印排序后的数组。我对它排序有困难的部分。我已经研究过它,并尝试使用,但这对我不起作用。我需要一种叫做比较器的东西,但不知道它是如何工作的。我必须使用这些,或者像气泡排序或插入排序之类的东西可以用于这种事情吗? 这是我目前掌握的代码: