如何解决将传统的for循环转换为Java Stream
我正在尝试将传统的for循环转换为Java Stream,但是出现了一些问题。基本上,我的方法执行花费太多时间。当我描述减少方法执行时间时。将传统的for循环转换为JavaStream时,列表大小为0,否则使用传统的for循环列表大小不为0且占用太多时间。请任何人解决此问题。
1。
for (ProductProjection p : products) {
if (p != null && p.getcommodityId() != 0) {
batchIdList.add(p.getcommodityId());
}
}
以上代码段转换为Java流是否正确,请 编辑我。
products.parallelStream().filter(product -> Objects.nonNull(product) && (product.getcommodityId() != 0))
.forEach(pro -> {
batchIdList.add(pro.getcommodityId());
});
2。
for (ProductProjection p : products) {
for (CourseBatch cb : batches) {
if (cb.getId() == p.getcommodityId()) {
CourseProductResponse cpr = new CourseProductResponse();
if (cb.getCourse() != null) {
cpr.setCourseName(cb.getCourse().getCourseTitle());
cpr.setBatchName(cb.getBatchName());
}
cpr.setProduct(p);
response.add(cpr);
}
}
}
以上代码段转换为Java流是否正确,请 编辑我。
products.parallelStream()
.forEach(product -> {
batches.parallelStream().peek(e -> System.out.println("Batches : " + e))
.filter(cb -> cb.getId() == product.getcommodityId())
.forEach(cb -> {
CourseProductResponse cpr = new CourseProductResponse();
if (Objects.nonNull(cb.getCourse())) {
cpr.setCourseName(cb.getCourse().getCourseTitle());
cpr.setBatchName(cb.getBatchName());
}
cpr.setProduct(product);
response.add(cpr);
});
});
第二个循环。 ProductProjection列表大小:1238和CourseBatch列表大小:1124
解决方法
请勿修改流中的集合,请使用方法collect()
1。
List<??> addToBatchIdList = products.parallelStream()
.filter(Objects::nonNull)
.map(product::getCommodityId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
batchIdList.addAll(addToBatchIdList);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。