我已将常规 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 在第一位。
你应该使用 filter
和 map
改造 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/