在Java中,按字符串属性对类数组排序
我需要按字母顺序对由自定义类用户的实例组成的数组User[]contactList进行排序,并使用内置的String属性。我的意思是,例如,我的类用户是:在Java中,按字符串属性对类数组排序,java,android,arrays,sorting,Java,Android,Arrays,Sorting,我需要按字母顺序对由自定义类用户的实例组成的数组User[]contactList进行排序,并使用内置的String属性。我的意思是,例如,我的类用户是: public class User{ String firstName; public User(String firstName){ this.firstName = firstName; } } 如果我的阵列联系人列表由以下项目组成: 联系人列表[0]的名字为Maria 联系人列表[1
public class User{
String firstName;
public User(String firstName){
this.firstName = firstName;
}
}
如果我的阵列联系人列表由以下项目组成:
联系人列表[0]的名字为Maria
联系人列表[1]的firstName=Andrew
联系人列表[2]的名字为Joey
我想按名字的字母顺序排序,结果应该是:
sortedList[0]的firstName=Andrew
sortedList[1]应该有firstName=Joey
sortedList[2]应该有firstName=Maria
我如何在Java Android中实现这一点
编辑1:我不能在我的项目中使用lambda表达式,因为我在Android Studio中使用Java 7
编辑2:我也不能修改用户类。我在这个问题中对其进行了简化,但该类是API的内置类。对于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);
可以对数组使用Arrays.sort对其进行排序。但是,该方法无法知道如何对用户进行排序。要实现这一点,需要实现Comparable接口,然后让compareTo方法将比较委托给firstName字段:
现在,您可以简单地使用Arrays.sort对数组进行排序。在Java Android中如何实现这一点?通过做研究,在这里搜索,回顾JDK的JavaDoc,并尝试一下。如果你做了所有这些,并遇到了一个特定的问题,张贴一个问题与您的代码和描述的具体问题。人们会很乐意帮忙的。啊哈。但事实上,这是一个具体的问题。为了让它更直观,我简化了很多。我以前做过研究,但没有找到解决办法。哦,拉另一个,它有腿。在整个web上都找不到关于如何在Java中对数组进行排序的信息?胡说八道。试试这个:重复的,可能还有十几个。似乎我不能使用lambda表达式,因为我在Android Studio项目中没有使用Java 8。lambda表达式在此语言级别不受支持。。。还有其他方法可以实现吗?我已经更新了答案,包括对旧版本的JavaI使用比较器。问题是我无法更新用户类,因为它是API的内置类:
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);
}
}