为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼如林 2021-11-24 14:34:23
我试图用一个流替换这个 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());我应该使用不同的管道吗?
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

拉布是对的!但是为了正确的行为,我更新了一点:


incoming.stream()

        .filter(dict::contains)

        .forEach(spelledCorrectly::add);


incoming.stream()

        .filter(e -> !e.isEmpty() && !dict.contains(e.toLowerCase()))

        .forEach(misspelled::add);


查看完整回答
反对 回复 2021-11-24
?
萧十郎

TA贡献1815条经验 获得超12个赞

您可以先清理您的单词并过滤掉空的单词,然后将它们收集到一个分区:


Map<Boolean, List<String>> result = incoming.stream()

    .map(String::trim)

    .map(String::toLowerCase)

    .filter(s -> !s.isEmpty())

    .collect(Collectors.partitioningBy(dict::contains));


查看完整回答
反对 回复 2021-11-24
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

虽然我认为 ernest(看起来他/她删除了答案)曾经是一个很好的答案,但我决定将您的循环转换为流,


    incoming.stream()

            .filter(dict::contains)

            .forEach(spelledCorrectly::add);


    incoming.stream()

            .filter(e -> !e.isEmpty())

            .forEach(misspelled::add);

这应该和你在 for 循环中做的事情一样


查看完整回答
反对 回复 2021-11-24
  • 3 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信