猿问

用流替换 for 循环以添加正确和不正确拼写的单词

我试图用一个流替换这个 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());

我应该使用不同的管道吗?


呼如林
浏览 138回答 3
3回答

开心每一天1111

拉布是对的!但是为了正确的行为,我更新了一点:incoming.stream()        .filter(dict::contains)        .forEach(spelledCorrectly::add);incoming.stream()        .filter(e -> !e.isEmpty() && !dict.contains(e.toLowerCase()))        .forEach(misspelled::add);

萧十郎

您可以先清理您的单词并过滤掉空的单词,然后将它们收集到一个分区:Map<Boolean, List<String>> result = incoming.stream()&nbsp; &nbsp; .map(String::trim)&nbsp; &nbsp; .map(String::toLowerCase)&nbsp; &nbsp; .filter(s -> !s.isEmpty())&nbsp; &nbsp; .collect(Collectors.partitioningBy(dict::contains));

潇潇雨雨

虽然我认为 ernest(看起来他/她删除了答案)曾经是一个很好的答案,但我决定将您的循环转换为流,&nbsp; &nbsp; incoming.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(dict::contains)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .forEach(spelledCorrectly::add);&nbsp; &nbsp; incoming.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(e -> !e.isEmpty())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .forEach(misspelled::add);这应该和你在 for 循环中做的事情一样
随时随地看视频慕课网APP

相关分类

Java
我要回答