我的应用结构如下: 调用服务类的 Controller 又调用存储库类。 存储库(objectRepo)返回一个对象列表。 服务类通过从存储库获取的对象列表进行解析,并将其转换为 apiResponseWrapper 类。 Controller 将此 apiResponseWrapper 提供给用户而不更改它。
在我的服务类中,我的代码可以有效地转换为以下示例代码:
List<Object> objectList = objectRepo.getList(paramMap);
List<Entity> entityList = new ArrayList<>();
objectList.parallelStream().forEach(object->{
//code to transform object
entityList.add(transformedObject);
});
return entityList;
当像上面那样使用 parallelstream 时,我的 API 的响应大小在连续调用时会有所不同,参数完全相同,并且在进一步检查时,某些实体在少数这些调用的响应中不存在。删除 parallelStream 后,响应的大小保持不变,并且所有预期的实体都在结果中。
我想知道是否有任何特定的方法/任何一套指南可以帮助我在不丢失任何数据的情况下使用并行流。
最佳答案
不要那样做...使用:
List<Entity> entityList = objectList.stream()
.parallel()
.map(object -> transform to transformedObject)
.collect(Collectors.toList())
毕竟 entityList
不是您从多个线程更新的线程安全集合,文档中也不鼓励这样做,因为这是不必要的副作用。
此外,在极少数情况下并行
会提高性能,您需要很多 对象才能产生任何有意义的效果。
关于java - 在 Java 8 中使用并行流时,我对同一请求得到不同大小的响应。任何人都可以提供有关如何处理此问题的见解吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52053875/