Замена цикла на поток для добавления правильно и неправильно написанных слов - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь заменить этот цикл for потоком, который добавляет правильно написанные слова к spelledCorrectly и неправильно написанные слова к misspelled

    for (String e : incoming) {
        if (dict.contains(e.toLowerCase()))
            spelledCorrectly.add(e.toLowerCase());
        else if (!"".equals(e.toLowerCase().trim())) {
            misspelled.add(e);
        }
    }

И вот что я пробовал, но яя получаю ошибки в строках .map и .collect, и я не уверен, как их исправить.

    incoming.stream()
        .filter(e -> dict.contains(e.toLowerCase()))
        .map(spelledCorrectly::getId)
        .collect(toList());

    incoming.stream()
        .filter(e -> !"".equals(e.toLowerCase().trim()))
        .map(misspelled::getId)
        .collect(toList());

, если я использую разные конвейеры?

Ответы [ 4 ]

0 голосов
/ 17 октября 2018

Раб прав!Но для правильного поведения я немного обновился:

incoming.stream()
        .filter(dict::contains)
        .forEach(spelledCorrectly::add);

incoming.stream()
        .filter(e -> !e.isEmpty() && !dict.contains(e.toLowerCase()))
        .forEach(misspelled::add);
0 голосов
/ 17 октября 2018

Хотя я думаю, что ernest (похоже, он / она удалил ответ) один раз хорош, я решил преобразовать ваш цикл в поток,

    incoming.stream()
            .filter(dict::contains)
            .forEach(spelledCorrectly::add);

    incoming.stream()
            .filter(e -> !e.isEmpty())
            .forEach(misspelled::add);

это должно сделать то же самое, что выделают в цикле

0 голосов
/ 17 октября 2018

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

Map<Boolean, List<String>> result = incoming.stream()
    .map(String::trim)
    .map(String::toLowerCase)
    .filter(s -> !s.isEmpty())
    .collect(Collectors.partitioningBy(dict::contains));
0 голосов
/ 17 октября 2018

В приведенном выше фрагменте кода spelledCorrectly и mispelled - это локальные переменные, уже присутствующие перед циклом:

incoming.stream()
    .filter(e ->   dict.contains(e.toLowerCase())).forEach(e->spelledCorrectly.add(e));

incoming.stream()
    .filter(e -> !"".equals(e.toLowerCase().trim())).forEach(misspelled.add(e));

будет правильным переводом вашего цикла в потоки

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