按Java

时间:2017-08-30 09:03:30

标签: java android arrays sorting

我需要按内置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的内置类。

2 个答案:

答案 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对数组进行排序。