[英]Using CompletableFuture with @Async returns an empty response for spring boot API
[英]How to convert this code to async in Java 8 using CompletableFuture ? I am using Spring Boot
這是需要異步的代碼片段:
List<Course> courses = Lists.newArrayList();
Map<String, Map<String, Student>> result = Maps.newHashMap();
for (Map<String, Object> map : jsonObject) {
courses.add(getCourse(map, fee));
result.put(map.get(GROUP), getInfoMap(map));
}
PS: for-each
循環中的map
在兩個方法調用中都沒有發生突變,它們僅使用信息。
如何使上述代碼異步運行? 有兩種方法被稱為getCourse(map, fee)
和getInfoMap(map)
,順序運行它們需要相當長的時間。
// start parallel operations
List<Future<Course>> coursesFut = Lists.newArrayList();
Map<String, Future<Map<String, Student>>> resultsFut = Maps.newHashMap();
for (Map<String, Object> map : jsonObjec t){
coursesFut.add(CompletableFuture.supplyAsync(() -> getCourse(map, fee)));
resultsFut.put(map.get(GROUP), CompletableFuture.supplyAsync(() -> getInfoMap(map)));
}
// collect results
List<Course> courses = Lists.newArrayList();
Map<String, Map<String, Student>> result = Maps.newHashMap();
for (Future<Course> cf : coursesFut) {
courses.add(cf.get());
}
for (Map.Entry<String, Future<Map<String, Student>> entry : resultsFut.entrySet()) {
result.put(entry.getKey(), entry.getValue().get());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.