使用流 API 设置字符串全部小写但首字母大写
Using stream API to set strings all lowercase but capitalize first letter
我有一个 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));;
}
}
输出:
me
to
you
some
from
strings
期望的输出:
Me
To
You
Some
From
Strings
像这样应该就足够了:
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));
- 请注意,我已经更改了比较器,这基本上是惯用的方法。
- 我在第一个字母大写排序后添加了一个
map
操作。
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();
}
}
因此您可以通过 eloquent 方法引用来引用它:
list.stream()
.map(StringUtils::capitalise)
.sorted(Comparator.comparingInt(String::length))
.forEach(System.out::println);
为此,您可以使用 Apache Commons Lang 中的 WordUtils::capitalizeFully
。
list.stream()
.sorted(Comparator.comparingInt(String::length))
.map(WordUtils::capitalizeFully)
.forEach(System.out::println);
我有一个 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));;
}
}
输出:
me
to
you
some
from
strings
期望的输出:
Me
To
You
Some
From
Strings
像这样应该就足够了:
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));
- 请注意,我已经更改了比较器,这基本上是惯用的方法。
- 我在第一个字母大写排序后添加了一个
map
操作。
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();
}
}
因此您可以通过 eloquent 方法引用来引用它:
list.stream()
.map(StringUtils::capitalise)
.sorted(Comparator.comparingInt(String::length))
.forEach(System.out::println);
为此,您可以使用 Apache Commons Lang 中的 WordUtils::capitalizeFully
。
list.stream()
.sorted(Comparator.comparingInt(String::length))
.map(WordUtils::capitalizeFully)
.forEach(System.out::println);