我在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
中完成。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
您有两种选择。让我们看看第一个:
ArrayList<User> users
并将user.userName放入String[] usersArr
Collections.sort(Arrays.asList(usersArr));
第3步:定义int startIndex = 0
,int 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;
}
现在,让我们看看第二个选项:
Collections.sort(Arrays.asList(users));
请注意,我将HashMap更改为TreeMap。如果Map中键的顺序很重要,则应使用TreeMap,因为在迭代键时,它们将按顺序排列。请检查此post。
希望这个答案能让你更清楚。