Java Stream .map仅首字母大写

Wor*_*kkk 5 java string

我正在尝试按字母顺序对列表进行排序,并将每个名称的第一个字母大写.

当我执行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)