按名称对列表进行排序

3

我有一个用户描述列表,格式如下:

0_Mary_Rose_maryrose@gmail.com
1_John_Smith_johnsmith@gmail.com

如何按字母顺序排序列表?

我有这个方法:

protected List<String> ShowUsers() {                                   // show users list
    List<String> allUsersDesc = new ArrayList<>();                                                   // creates list for users description
    for (Map.Entry<Integer, User> user : _userMap.entrySet()) {                                        // scrolls users list
      allUsersDesc.add(user.getValue().getUserDescription());                                        // adds registered users
    }
    Collections.sort(allUsersDesc);                                                                  // sorts by description
    return allUsersDesc;                                                                             // return description list   }

getUserDescription

    public String getUserDescription(){
        String description = "" + getUserId() + "-" + getName() + "-" + getEmail() + "-" + getBehavior() + "-" + isActive();
        return description;
    }

但是按照这种方式排序是按照描述来排序的,而描述的第一项是一个数字,因此实际上是按照数字排序而不是用户姓名。


4
请先对用户列表进行排序。在获得排序后的用户列表后,将其转换为字符串列表。 - JB Nizet
排序有第二个参数用于比较器。您需要一个自定义比较器,按您喜欢的方式对条目进行排序。例如,首先使用split("_")[1]或任何其他方式提取用户名。 - Volokh
使用以下代码:list.sort((first, second) -> { final String firstPart = first.split("")[1]; final String secondPart = second.split("")[1]; return firstPart.compareTo(secondPart); }); - Nikolas Charalambidis
1
如果电子邮件地址也以数字开头怎么办? - tobias_k
2个回答

0

您可以使用以下代码删除整数,然后比较字符串

 Collections.sort(list, new Comparator<String>() {
            public int compare(String o1, String o2) {
                return removeInt(o1).compareTo(removeInt(o2));
            }
            String removeInt(String s) {
                String num = s.replaceAll("[0-9]+", "");
                return num;
            }
        });

-1
 allUsersDesc.sort(Comparator.comparing(desc -> desc.split("_")[1]));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接