簡體   English   中英

如何使用 CompletableFuture 將此代碼轉換為 Java 8 中的異步代碼? 我正在使用 Spring 引導

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM