我正在尝试按字母顺序对列表进行排序,并将每个名称的第一个字母大写.
当我执行toUpperCase时,它会将每个字母都大写.如果我不使用打印它.map,我会做(topNames2017.substring(0, 1).toUpperCase() + topNames2017.substring(1))工作正常,但我不知道如何在这里应用它
List<String> topNames2017 = Arrays.asList(
"Amelia",
"Olivia",
"emily",
"Isla",
"Ava",
"oliver",
"Jack",
"Charlie",
"harry",
"Jacob"
);
topNames2017
.stream()
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
Ous*_* D. 11
您将需要使用lambda来使您当前的尝试工作,例如:
.map(name -> name.substring(0, 1).toUpperCase() + name.substring(1))
Run Code Online (Sandbox Code Playgroud)
name上面的标识符表示传递给map操作的当前字符串.
或者,它也可以这样做:
.map(name -> Character.toUpperCase(name.charAt(0)) + name.substring(1))
Run Code Online (Sandbox Code Playgroud)
如果你想保持使用方法引用,那么你可以像这样定义自己的函数:
static String capitaliseFirstLetter(String name){
return name.substring(0, 1).toUpperCase() + name.substring(1);
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以:
topNames2017.stream()
.map(Main::capitaliseFirstLetter) // replace Main with the class containing the capitaliseFirstLetter method
.sorted()
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)