我只需要对特定字词进行更改

时间:2019-03-22 22:59:33

标签: java filter java-stream

我对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"

它应该返回

  

“我喜欢在家里吃披萨”

目前它给了我

  

“我喜欢在家里吃披萨”

1 个答案:

答案 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);的结果将是:

  

我喜欢在家里吃披萨