Java 有没有办法根据数组内部包含的名称拆分字符串ArrayList?

Java 有没有办法根据数组内部包含的名称拆分字符串ArrayList?,java,arrays,arraylist,Java,Arrays,Arraylist,我需要编写一个方法来接收一个包含一组人名的ArrayList,然后根据名字的第一个字母将这个ArrayList分割成更小的ArrayList。像“亚伦,阿尔伯特,安娜”这样的名字必须放在一个ArrayList上,“巴特,鲍勃,比利”必须放在另一个ArrayList上。然后我需要给出一个包含所有这些小列表的列表。我需要为此编写一个JUnit测试。这是一个Java初学者课程上的练习:(它快把我逼疯了 我试着写“for loops”来检查每个单词的起始字符,但这肯定是一个更好的方法 这是将用作方法参数

我需要编写一个方法来接收一个包含一组人名的ArrayList,然后根据名字的第一个字母将这个ArrayList分割成更小的ArrayList。像“亚伦,阿尔伯特,安娜”这样的名字必须放在一个ArrayList上,“巴特,鲍勃,比利”必须放在另一个ArrayList上。然后我需要给出一个包含所有这些小列表的列表。我需要为此编写一个JUnit测试。这是一个Java初学者课程上的练习:(它快把我逼疯了

我试着写“for loops”来检查每个单词的起始字符,但这肯定是一个更好的方法

这是将用作方法参数的列表:

public List<String> namesList() {
    List<String> names = new ArrayList<String>();
    names.add("ANA");
    names.add("ANA BEATRIX");
    names.add("JOE");
    names.add("WALTER");
    names.add("ROBERT");
    names.add("RODNEY");
    names.add("RUDOLPH");
    names.add("VAGNER");
    names.add("JOSE");
    names.add("CLEITON");
    names.add("MARIA");
    names.add("MARK");

    return names;
}
公共列表名称列表(){
列表名称=新的ArrayList();
名称。添加(“ANA”);
姓名。添加(“安娜·比阿特丽克斯”);
名称。添加(“乔”);
名称。添加(“沃尔特”);
姓名。添加(“罗伯特”);
名称。添加(“罗德尼”);
名称。添加(“鲁道夫”);
名称。添加(“VAGNER”);
名称。添加(“何塞”);
名称。添加(“克莱顿”);
姓名。添加(“玛丽亚”);
名称。添加(“标记”);
返回姓名;
}
然后我试着编写如下方法:

public List<List<String>> separateNames(List<String> names) {
    Collections.sort(names);
    for (String s : name)
    {
       if (s.charAt(0) == 'A') {
           // then create an ArrayList to store names starting with A
       }

    }
}
公共列表分隔符名称(列表名称){
集合。排序(名称);
for(字符串s:名称)
{
如果(s.charAt(0)=‘A’){
//然后创建一个ArrayList来存储以
}
}
}
结果应该是列表中的一个列表,如[[“Aaron”、“Albert”、“Ana”]、[“Bart”、“Bob”、“Billy”……等等]

试试这个

List List=names.stream().collect(
Collectors.groupby(str->str.substring(0,1),
Collectors.toList()).values().stream().collect(
收藏家;
系统输出打印项次(列表);
试试这个

List List=names.stream().collect(
Collectors.groupby(str->str.substring(0,1),
Collectors.toList()).values().stream().collect(
收藏家;
系统输出打印项次(列表);

返回新的ArrayList(name.stream().collect(Collectors.groupingBy(name->name.charAt(0))).values());
我不明白发生了什么(我是初学者),但我认为这个解决方案完成了任务。主ArrayList出现了故障(索引0的名称以“a”开头,索引1的名称以“R”开头)但是它完成了根据名称进行拆分的工作。非常感谢!如果您想对其进行排序,可以使用
收集器.groupingBy(name->name.charAt(0),TreeMap::new,Collectors.toList())
返回新的ArrayList(names.stream().collect(Collectors.groupingBy(name->name.charAt(0))).values();我不明白发生了什么(我是一个初学者)但我认为这个解决方案起到了作用。主ArrayList出现了故障(索引0的名称以“a”开头,索引1的名称以“R”开头),但它完成了基于名称的拆分工作。非常感谢!您可以使用
Collectors.groupingBy(name->name.charAt(0),TreeMap::new,Collectors.toList())
如果您希望对其进行排序。