我需要按内置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的内置类。
答案 0 :(得分:2)
对于Java 8,使用lambda表达式和Arrays排序函数:
Users[] someUsers = {user1, user2, user3};
Arrays.sort(someUsers, (a,b) -> a.firstName.compareTo(b.firstName));
对于以前的版本,请使用Collection Comparator:
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);
答案 1 :(得分:1)
您可以在数组上使用Arrays.sort
对其进行排序。但是,该方法无法知道如何对User
进行排序。为实现这一目标,您需要实施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
对数组进行排序。