【问题标题】:Sort a class array by a string attribute in Java在Java中按字符串属性对类数组进行排序
【发布时间】:2017-08-30 09:03:30
【问题描述】:

我需要通过内置的 String 属性按字母顺序对数组 User[] contactList(由自定义类 User 的实例组成)进行排序。我的意思是,例如,我的班级用户是:

public class User{
    String firstName;
    
    public User(String firstName){
        this.firstName = firstName; 
    }
}

如果我的数组contactList 由以下项组成:

contactList[0] 有 firstName = "Maria"

contactList[1] 有 firstName = "Andrew"

contactList[2] 有 firstName = "Joey"

我想按他们的firstName 的字母顺序对其进行排序,因此,结果应该是:

sortedList[0] 应该有 firstName = "Andrew"

sortedList[1] 应该有 firstName = "Joey"

sortedList[2] 应该有 firstName = "Maria"

我如何在 Java (Android) 中实现这一点?

编辑 1:我不能在我的项目中使用 lambda 表达式,因为我在 Android Studio 中使用的是 Java 7。

编辑 2: 我也无法修改 User 类。我在这个问题中对其进行了简化,但该类是 API 的内置类。

【问题讨论】:

  • “我如何在 Java (Android) 中实现这一点?” 通过研究、在此处搜索 SO、查看 JDK 的 JavaDoc 并尝试一下. 如果您做了所有这些并遇到了特定问题,请在您的代码中发布一个问题并描述该特定问题。人们会很乐意提供帮助。
  • 啊哈。但是,事实上,这是一个特定的问题。我简化了很多,以使其简单明了。我之前做过研究,但没有找到解决方案。
  • 哦拉另一只,它有腿。您在整个网络上都找不到关于如何在 Java 中对数组进行排序的任何内容?废话。

标签: java android arrays sorting


【解决方案1】:

对于 Java 8,使用 lambda 表达式和数组排序函数:

Users[] someUsers = {user1, user2, user3};
Arrays.sort(someUsers, (a,b) -> a.firstName.compareTo(b.firstName));

对于以前的版本,使用集合比较器:

Users[] someUsers = {user1, user2, user3};
List<Users> userList = new ArrayList<Users>(Arrays.asList(someUsers));
Comparator<Users> comparator = new Comparator<Users>() {
    @Override
    public int compare(Users left, Users right) {
        return left.firstName.compareTo(right.firstName);
    }
};
Collections.sort(userList, comparator);

【讨论】:

  • 看来我不能使用 lambda 表达式,因为我没有在我的 Android Studio 项目中使用 Java 8(此语言级别不支持 lambda 表达式)...有没有其他方法可以实现它?
  • 我已经更新了答案,包括对旧版本的 Java 使用比较器
【解决方案2】:

您可以在数组上使用Arrays.sort 对其进行排序。但是,该方法无法知道如何对Users 进行排序。为此,您需要实现Comparable 接口,然后让compareTo 方法将比较委托给firstName 字段:

public static class User implements Comparable<User>{
  String firstName;
  public User(String firstName){
    this.firstName = firstName; 
  }
  @Override
  public int compareTo(User o) {
    return firstName.compareTo(o.firstName);
  }
}

现在您可以使用Arrays.sort 简单地对数组进行排序。

【讨论】:

  • 我编辑了这个问题。问题是我无法更新 User 类,因为它是 API 的内置类:(
猜你喜欢
  • 2021-06-27
相关资源
最近更新 更多