使用流API将字符串全部设置为小写但首字母大写

Dev*_*vin 13 java mapping capitalization java-8 java-stream

我有一个List<String>只通过使用流API我将所有字符串设置为小写,将它们从最小的字符串排序到最大字符串并打印它们.我遇到的问题是将字符串的第一个字母大写.

这是我做的事.stream().map()吗?

public class Main {

    public static void main(String[] args) {

        List<String> list = Arrays.asList("SOmE", "StriNgs", "fRom", "mE", "To", "yOU");
        list.stream()
            .map(n -> n.toLowerCase())
            .sorted((a, b) -> a.length() - b.length())
            .forEach(n -> System.out.println(n));;

    }

}
Run Code Online (Sandbox Code Playgroud)

输出:

me
to
you
some
from
strings
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Me
To
You
Some
From
Strings
Run Code Online (Sandbox Code Playgroud)

Ous*_* D. 14

这样的事情应该足够了:

 list.stream()
     .map(n -> n.toLowerCase())
     .sorted(Comparator.comparingInt(String::length))
     .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
     .forEachOrdered(n -> System.out.println(n));
Run Code Online (Sandbox Code Playgroud)
  1. 请注意,我已经改变了比较器,这实际上是惯用的方法.
  2. map在排序后添加了一个操作,将第一个字母大写.

  • 请记住,`forEach`不进行排序保证,因此要确保按排序顺序查看元素,必须使用`forEachOrdered`. (3认同)
  • @Devin你可以链接任意数量的中间操作. (2认同)

And*_*lko 14

list.stream()
    .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase())
    .sorted(Comparator.comparingInt(String::length))
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

为了便于阅读,应将执行大写的行移入方法中,

public class StringUtils {
    public static String capitalise(String s) {
        return s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase();
    }
}
Run Code Online (Sandbox Code Playgroud)

所以你可以通过一个雄辩的方法参考来引用它:

list.stream()
    .map(StringUtils::capitalise)
    .sorted(Comparator.comparingInt(String::length))
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

  • @AlexReinking虽然同意你的观点,但我只是想指出,我在发布时决定不使用一个地图操作的唯一原因是为了保持每个中间操作的逻辑简短而且容易看到如此制作OP更容易.记住,在一天结束时,OP似乎是Streams API的新人,谈论其他任何东西都是奖励,但是从他们的主要观点出发,即简单地将第一个角色大写.顺便说一句,好像现在OP知道可以使用多个"相同"的中间操作:). (3认同)
  • 这将显示比接受的答案更好的位置,该答案在排序的任一侧拆分地图. (2认同)