java - 使用过滤器将java for循环转换为流

标签 java lambda java-stream

我已将常规 for 循环代码转换为 java 8 流。我尝试了一些,但我仍在学习这个并且没有想法,请提出想法。这可以进一步简化吗?除了使用 forEach 之外,我不能做太多改变。 另外,为什么我必须在 getERecordFromId((String)eid) 中将 eid 类型转换为 String

Stream <String>eIdsStream = getEidStream();

final HashSet<String> declinedRecords = new HashSet<>();

eIdsStream.forEach (eid ->  {
        ERecord eRecord = getERecordFromId((String)eid);
        if(eRecord.getEHash() != null &&  Status.DECLINED == eRecord.getStatus()) {
            declineRecords.add(eRecord.getEHash());
        }
    }

最佳答案

因为您使用的是原始 Stream,所以需要转换多变的。假设 getEidStream()返回 Stream<String> , 你应该把它分配给 Stream<String>变量,或者根本没有将其分配给变量。

使用 forEach违背了使用 Stream 的目的s 在第一位。

你应该使用 filtermap改造 Stream保存所需的元素,然后收集到 Set .

Set<String> declinedRecords =
    getEidStream().map(eid -> getERecordFromId(eid))
                  .filter(eRecord -> eRecord.getEHash() != null &&  Status.DECLINED == eRecord.getStatus())
                  .map(ERecord::getEHash)
                  .collect(Collectors.toSet());

关于java - 使用过滤器将java for循环转换为流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56286878/

相关文章:

c++ - 在外部定义的 lambda 中捕获此内容

c# - 使用 lambda 表达式左连接

java - 修改列表-流方法

java - 如何保持流中元素的顺序

error-handling - 在java 8流foreach中抛出异常

java - WRONGTYPE 针对持有错误类型值的键的操作

java - 如何使用开关盒返回主菜单

java - jsoup/Java - 如何附加不间断空格

java - Spring MVC Controller 方法的自定义授权/安全性

c# - 如何正确合并具有不同参数的 lambda 表达式