在java中对arraylist进行分组和排序

时间:2017-11-23 15:32:49

标签: java sorting arraylist

我在SO中看了几个与排序有关的问题,但我无法实现我真正想要的。

我有一个这样的课程

class User{
    String userName;
    String phoneNumber;

    public User(String userName, String phoneNumber) {
        this.userName = userName;
        this.phoneNumber = phoneNumber;
    }
}

然后我添加了一些这样的数据

ArrayList<User> users = new ArrayList<User>();
users.add(new User("Aca","223554"));
users.add(new User("Ada","223544"));
users.add(new User("Cda","323544"));
users.add(new User("Bbc","323544"));
users.add(new User("Bla","323544"));
users.add(new User("Aka","123554"));
users.add(new User("Cla","323544"));

我想按字母顺序按User的用户名对数据进行分组,例如

A-- Aca, Aka
B-- BBc , Bla
C-- Cda, Cla

后来我想把它放在HashMap Like

Map<String,ArrayList<User>> userMap = new HashMap<String, ArrayList<User>>();

userMap.put("A", usersLisA); //usersLisA is an ArrayList of user whose name starts with A
userMap.put("B", usersLisB); //usersLisB is an ArrayList of user whose name starts with B

等等。

它类似于电话簿,它们按字母顺序对用户进行排序和分组的方式

有一点需要注意,我希望在Java7中完成。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

您有两种选择。让我们看看第一个:

  • 第1步:循环使用ArrayList<User> users并将user.userName放入String[] usersArr
  • 第2步:使用Collections.sort(Arrays.asList(usersArr));
  • 对数组进行排序
  • 第3步:定义int startIndex = 0int endIndex,并循环排序数组并:

    if((int) previousString.charAt(0) < (int) currentString.charAt(0)) {
        endIndex = currentString_position-1;
        TreeMap.put(previousString.charAt(0), usersArr.subList(startIndex, endIndex));
        startIndex = currentString_position;
    }
    

现在,让我们看看第二个选项:

  • 步骤1:为您的类用户覆盖hashCode()和compareTo(),以便稍后可以按userName对其进行排序
  • 步骤2:使用Collections.sort(Arrays.asList(users));
  • 对ArrayList进行排序
  • 步骤3:与上一个选项中的步骤3相同

请注意,我将HashMap更改为TreeMap。如果Map中键的顺序很重要,则应使用TreeMap,因为在迭代键时,它们将按顺序排列。请检查此post

希望这个答案能让你更清楚。