当前位置: 首页 > 面试题库 >

Java排序对象集合

白念
2023-03-14
问题内容

如果我有一个简单的字符串列表:

List<String> stringList = new ArrayList<String>();

我可以对它进行排序:

Collections.sort(stringList);

但是假设我有一个Person类:

public class Person
{
   private String name;
   private Integer age;
   private String country;
}

并列出:

List<Person> personList = new ArrayList<Person>();

我想有时按名称,有时按年龄,有时按国家对它进行排序。

最简单的方法是什么?

我知道我可以实现Comparable接口,但这似乎限制了我只能通过一个特定的属性对其进行排序。


问题答案:

可以使用自定义比较器调用Collections.sort。并且该比较器可以实现为允许以不同的排序顺序进行排序。这是一个示例(针对你的Person模型-使用年龄作为整数):

public class FlexiblePersonComparator implements Comparator<Person> {
  public enum Order {Name, Age, Country}

  private Order sortingBy = Name;

  @Override
  public int compare(Person person1, Person person2) {
    switch(sortingBy) {
      case Name: return person1.name.compareTo(person2.name);
      case Age: return person1.age.compareTo(person2.age);
      case Country: return person1.country.compareTo(person2.country);
    }
    throw new RuntimeException("Practically unreachable code, can't be thrown");
  }

  public void setSortingBy(Order sortBy) {
    this.sortingBy = sortingBy;
  }
}

你可以这样使用它(假设人员是一个字段):

public void sortPersonsBy(FlexiblePersonComparator.Order sortingBy) {
  List<Person> persons = this.persons;  // useless line, just for clarification
  FlexiblePersonComparator comparator = new FlexiblePersonComparator();
  comparator.setSortingBy(sortingBy);
  Collections.sort(persons, comparator); // now we have a sorted list
}


 类似资料:
  • 本文向大家介绍java 对象数组排序,包括了java 对象数组排序的使用技巧和注意事项,需要的朋友参考一下 废话不多说直接奉上代码先: 另附上Arrays.sort用法:       1. 数字排序 int[] intArray = new int[] { 4, 1, 3, -23 };   Arrays.sort(intArray);   输出: [-23, 1, 3, 4]   2. 字符串排

  • 我试图写一个函数来排序一个对象集合。由于对象都是相同的类型(相同的用户定义类),因此它们的属性集是相同的。是否有可能(通过代码)发现对象的属性,以便将集合放在一个二维数组中,每行代表一个对象,每列代表它的一个属性? 另一种解决方案是将集合中的每个对象复制到对象数组中,并根据它们的一个属性对它们进行排序,该属性的名称作为字符串传递给函数。但是我不知道如何使用作为字符串传递的属性名来指向对象的属性。

  • 本文向大家介绍PowerShell 排序:排序对象/排序,包括了PowerShell 排序:排序对象/排序的使用技巧和注意事项,需要的朋友参考一下 示例 按升序或降序对枚举进行排序 同义词: 假设: 升序排序是默认设置: 阿龙 阿龙 伯尼 查理· 丹尼 要请求降序排列: 丹尼· 查理 ·伯尼· 亚伦 ·亚伦 您可以使用表达式进行排序。 阿龙 阿龙 丹尼· 伯尼· 查理

  • 问题内容: 我有一个Java集合: 现在在显示列表之前有一个字段,我想按此排序此集合。 有什么办法可以做到吗? 问题答案: 使用比较器: 此外,如果实现,则只需使用 使用JDK 8,语法要简单得多。 更简单 最简单的 显然,初始代码也可以用于JDK 8。

  • 主要内容:1 集合元素的排序,2 Collections sort方法,3 字符串正序排序,4 字符串倒序排序,5 包装类型排序,6 自定义对象排序1 集合元素的排序 我们可以对以下元素进行排序: 字符串对象 包装类对象 用户自定义对象 Collections类提供用于对集合的元素进行排序的静态方法。如果集合元素为Set类型,则可以使用TreeSet。但是,我们无法对List的元素进行排序。Collections类提供用于对List类型元素的元素进行排序的方法。 2 Collections so

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