【问题标题】:Is there a way to split a String ArrayList based on the names that contains inside of the array?有没有办法根据包含在数组内部的名称来拆分 String ArrayList?
【发布时间】:2019-07-23 23:15:20
【问题描述】:

我需要编写一个接收包含一堆人名的 ArrayList 的方法,然后根据姓名的第一个字母将此 ArrayList 分成更小的 ArrayList。像“Aaron, Albert, Ana”这样的名字必须放在一个 ArrayList 上,“Bart, Bob, Billy” 必须放在另一个上。然后我需要提供一个包含所有这些较小列表的列表。我需要为此编写一个 JUnit 测试。这是一个针对初学者 Java 课程的练习 :( 快把我逼疯了。

我曾尝试编写“for 循环”来检查每个单词的起始字符,但这一定是一种更好的方法。

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

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;
}

然后我尝试写方法如下:

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
       }

    }
}

结果应该是列表中的一个列表,例如 [["Aaron", "Albert", "Ana"], ["Bart", "Bob", "Billy"... 等等]]

【问题讨论】:

  • return new ArrayList&lt;&gt;(names.stream().collect(Collectors.groupingBy(name -&gt; name.charAt(0))).values());
  • 我不明白发生了什么(我是初学者),但我认为这个解决方案完成了工作。主 ArrayList 出现故障(索引 0 的名称以“A”开头,索引 1 的名称以“R”开头),但它完成了根据名称进行拆分的工作。非常感谢!
  • 如果您想对其进行排序,可以使用Collectors.groupingBy(name -&gt; name.charAt(0), TreeMap::new, Collectors.toList())

标签: java arrays arraylist


【解决方案1】:

试试这个。

      List<List<String>> list = names.stream().collect(
            Collectors.groupingBy(str -> str.substring(0, 1),
                  Collectors.toList())).values().stream().collect(
                        Collectors.toList());
      System.out.println(list);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-30
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    相关资源
    最近更新 更多