在java中对arraylist进行分组和排序
我已经在SO中查看了几个与排序相关的问题,但我无法实现我真正想要的 我有一节这样的课在java中对arraylist进行分组和排序,java,sorting,arraylist,Java,Sorting,Arraylist,我已经在SO中查看了几个与排序相关的问题,但我无法实现我真正想要的 我有一节这样的课 class User{ String userName; String phoneNumber; public User(String userName, String phoneNumber) { this.userName = userName; this.phoneNumber = phoneNumber; } } ArrayList&l
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"));
然后我添加了一些类似的数据
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"));
然后我想把它放到HashMap中
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
Map userMap=newhashmap();
userMap.put(“A”,usersLisA)//usersLisA是用户名以
userMap.put(“B”,usersLisB)//usersLisB是用户名以B开头的ArrayList
等等
这有点像电话簿,他们按字母顺序对用户进行排序和分组的方式
这里需要注意的一件事是,我想在Java7
中完成
我们将非常感谢您的帮助 您有两个选择。让我们看看第一个:
- 步骤1:在
ArrayList用户上循环,并将user.userName放入
字符串[]usersArr
- 步骤2:使用
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; }
if((int)previousString.charAt(0)<(int)currentString.charAt(0)){ endIndex=currentString_位置-1; TreeMap.put(previousString.charAt(0),usersArr.subList(startIndex,endIndex)); startIndex=当前字符串位置; }
- 步骤1:为类用户重写hashCode()和compareTo(),以便以后可以按用户名排序
- 步骤2:使用
Collections.Sort(Arrays.asList(users))对ArrayList进行排序代码>
- 步骤3:与上一选项中的步骤3相同
希望这个答案能让你看得更清楚。你显然看得不够清楚。大量相关文献。请更加努力,您可以按
用户名
排序,然后循环填充您的hash mapImplement equals hashCode并对用户进行比较。然后使用树映射而不是哈希映射。你不是在使用Java8吗?遗憾的是,它可以在一行中完成:Map groups=users.stream().collect(Collectors.groupingBy(t->t.getUsername().substring(0,1))代码>-假设每个用户都有一个非空名称。@实际上,我将在android中使用它。它需要比我的最低api级别更高的api级别。