我对Java 8流有String问题。他们希望我将所有第一个字母都改为大写字母,即使这些单词不在“ the”,“ a”,“ to”,“ of”,“ in”组中。
我的问题是filter
命令确实从组中删除了单词,我必须保留它们。
我已经完成了大写第一个字母的部分,但是我不知道如何在单词组上进行“跳转”
private List<String> ignoredWords = Arrays.asList("the", "a", "to", "of", "in");
String entryParts[] = toTitlelize.split(" ");
List<String> sentenceParts = Arrays.asList(entryParts);
List<String> finalSentence = sentenceParts.stream()
.map(WordUtils::capitalize)
.collect(toList());
例如:
if toTitlelize = "I love to eat pizza in my home"
它应该返回
“我喜欢在家里吃披萨”
目前它给了我
“我喜欢在家里吃披萨”
答案 0 :(得分:2)
您可以在映射步骤中使用简单的if
语句:
List<String> finalSentence = Arrays.stream(entryParts)
.map(word -> {
if (ignoredWords.contains(word)) {
return word;
}
return WordUtils.capitalize(word);
})
.collect(Collectors.toList());
作为替代方案,您可以在filter()
上使用findFirst()
和ignoredWords
并使用Optional
:
List<String> finalSentence = Arrays.stream(entryParts)
.map(word -> ignoredWords.stream().filter(w -> w.equals(word)).findFirst().orElse(WordUtils.capitalize(word)))
.collect(Collectors.toList());
我还建议使用HashSet
而不是List
,因为单词是唯一的,并且contains()
更快:
HashSet<String> ignoredWords = new HashSet<>(Arrays.asList("the", "a", "to", "of", "in"));
String.join(" ", finalSentence);
的结果将是:
我喜欢在家里吃披萨