Удалить несколько строк из строки, используя поток - PullRequest
3 голосов
/ 15 января 2020

У меня есть список строк и строки. Если у String есть какой-либо из списков, мне нужно удалить его.

Я использую приведенный ниже подход, и он работает нормально. Мне просто интересно, если это можно заменить с помощью Stream API?

List<String> exclude = getExcludeList();

String phrase = "My test phrase";

for (String str: exclude) {
    phrase = phrase.replace(str, "");
}

Ответы [ 3 ]

1 голос
/ 15 января 2020

Вы можете сформировать чередование регулярных выражений, состоящее из строк в списке, а затем выполнить замену регулярных выражений, чтобы удалить их из фразы:

List<String> exclude = getExcludeList();
String phrase = "My test phrase";
String regex = exclude.stream().collect(Collectors.joining("|", "\\b(?:", ")\\b"));
phrase = phrase.replaceAll(regex, "");
0 голосов
/ 15 января 2020

В «потоковом» способе Java 8 лучший способ - использовать редукторный коллектор:

String phrase = getExcludeList().stream()
    .collect(Collectors.reducing(
        "My test phrase",
        (ph, t) -> ph.replace(t, "")
    ));
0 голосов
/ 15 января 2020

Это будет отчасти уродливо, так как вы хотите изменить непотоковую переменную внутри потока, и поток может эффективно получить доступ только к конечным переменным вне их области видимости.

Но это выполнимо:

String[] holder = new String[] {phrase};

exclude.stream().foreach(s -> phrase[0] = phrase[0].replace(s, "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...