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

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

这是我通过做的事情吗?.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));;

    }

}

输出:

me
to
you
some
from
strings

所需输出:

Me
To
You
Some
From
Strings

答案 1

像这样的东西应该就足够了:

 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));
  1. 请注意,我已经更改了比较器,这本质上是执行此操作的惯用方法。
  2. 我在排序后添加了一个操作,将第一个字母大写。map

答案 2
list.stream()
    .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase())
    .sorted(Comparator.comparingInt(String::length))
    .forEach(System.out::println);

为了便于阅读,执行大写的行应移到一个方法中,

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

因此,您可以通过雄辩的方法引用它:

list.stream()
    .map(StringUtils::capitalise)
    .sorted(Comparator.comparingInt(String::length))
    .forEach(System.out::println);

推荐