Мне нужно сделать изменения только на конкретные слова - PullRequest
2 голосов
/ 23 марта 2019

У меня проблема со строкой для потоков Java 8.Они хотят, чтобы я изменил всю первую букву на заглавную, просто если слова не входят в группу "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 Ответ

2 голосов
/ 23 марта 2019

Вы можете использовать простой оператор 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); будет:

Я люблю есть пиццу в моем доме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...