Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中对arraylist进行分组和排序_Java_Sorting_Arraylist - Fatal编程技术网

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

在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

我已经在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"));
然后我添加了一些类似的数据

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相同
注意,我将HashMap更改为TreeMap。如果映射中键的顺序很重要,那么应该使用TreeMap,因为在对键进行迭代时,它们将按顺序排列。看看这个


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

你显然看得不够清楚。大量相关文献。请更加努力,您可以按
用户名
排序,然后循环填充您的hash mapImplement equals hashCode并对用户进行比较。然后使用树映射而不是哈希映射。你不是在使用Java8吗?遗憾的是,它可以在一行中完成:
Map groups=users.stream().collect(Collectors.groupingBy(t->t.getUsername().substring(0,1))-假设每个用户都有一个非空名称。@实际上,我将在android中使用它。它需要比我的最低api级别更高的api级别。