我需要编写一个方法,该方法接收包含一堆人名的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” ...等]] >
答案 0 :(得分:0)
尝试一下。
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);