Java 8 如何将Play2.1异步方法转换为Play2.3

Java 8 如何将Play2.1异步方法转换为Play2.3,java-8,akka,java-7,playframework-2.1,playframework-2.3,Java 8,Akka,Java 7,Playframework 2.1,Playframework 2.3,我正在尝试将PlayFramework项目升级到当前版本,但在转换之前的一个返回签名时遇到问题 之前(Play 2.1/Java 1.7)我们有一个控制器方法,它构建了一系列照片对象作为承诺,然后在最后将结果合并为异步响应: // Combine all promises into a single promise Promise<List<Photo>> promises = Promise.sequence(eachPromisedPhoto.toArray(new

我正在尝试将PlayFramework项目升级到当前版本,但在转换之前的一个返回签名时遇到问题

之前(Play 2.1/Java 1.7)我们有一个控制器方法,它构建了一系列照片对象作为承诺,然后在最后将结果合并为异步响应:

// Combine all promises into a single promise
Promise<List<Photo>> promises =  Promise.sequence(eachPromisedPhoto.toArray(new Promise[0]));

// Return
return async(
  promises.map(
    new Function<List<Photo>, Result>() {
      public Result apply(List<Photo> photos) {
        List<String> MD5s = new ArrayList<String>();
        for (Photo photo : photos) {
          if (photo != null && photo.isValid()) {
            MD5s.add(photo.toString());
          }
        }
        ObjectNode resultFinal = Json.newObject();
        if (MD5s.size() > 0) {
          resultFinal.put("MD5s", Json.toJson(MD5s));
          resultFinal.put("status", "OK");
        }
        else {
          resultFinal.put("status", "KO");
        }
        return ok(resultFinal);
      }
    }
  )
);
//将所有承诺合并为一个承诺
Promise promises=Promise.sequence(每个promisedphoto.toArray(新Promise[0]);
//返回
异步返回(
承诺地图(
新函数(){
公开结果申请(照片列表){
List MD5s=new ArrayList();
(照片:照片){
if(photo!=null&&photo.isValid()){
添加(photo.toString());
}
}
ObjectNode resultFinal=Json.newObject();
如果(MD5s.size()>0){
resultFinal.put(“MD5s”,Json.toJson(MD5s));
结果最终。放置(“状态”、“确定”);
}
否则{
结果最终结果。put(“状态”、“KO”);
}
返回ok(resultFinal);
}
}
)
);

据我所知,异步方法在Play2.3+中不再可用,并且不清楚如何正确地将此返回签名转换为新方法。我们也在升级到Java1.8,所以lambda表达式的使用也很好。

解决了这个问题。以下是修改后的代码:

// Combine all promises into a single promise
Promise<List<Photo>> promises = Promise.sequence(eachPromisedPhoto);

// Return
return promises.map(
  new Function<List<Photo>, Result>() {
    public Result apply(List<Photo> photos) {
      List<String> MD5s = new ArrayList<>();
      photos.stream().filter(photo -> photo != null && photo.isValid()).forEach(photo -> {
        MD5s.add(photo.toString());
      });
      ObjectNode resultFinal = Json.newObject();
      if (MD5s.size() > 0) {
        resultFinal.put("pathSums", Json.toJson(MD5s));
        resultFinal.put("status", "OK");
      }
      else {
        resultFinal.put("status", "KO");
        resultFinal.put("message", "No results returned");
      }
      return ok(resultFinal);
    }
  }
);
return Promise.promise(() -> badRequest(result));