Play Java中的累加器的映射方法?



在Play Java的官方文档中,我看到了这段代码。

public Accumulator<ByteString, F.Either<Result, User>> apply(RequestHeader request) {
Accumulator<ByteString, F.Either<Result, JsonNode>> jsonAccumulator = jsonParser.apply(request);
return jsonAccumulator.map(resultOrJson -> {
   if (resultOrJson.left.isPresent()) {
       return F.Either.Left(resultOrJson.left.get());
   } else {
       JsonNode json = resultOrJson.right.get();
       try {
           User user = play.libs.Json.fromJson(json, User.class);
           return F.Either.Right(user);
       } catch (Exception e) {
           return F.Either.Left(Results.badRequest(
               "Unable to read User from json: " + e.getMessage()));
       }
   }
}, executor);

}

我不明白什么是mapresultOrJson

尽管实例Accumulator<ByteString, F.Either<Result, JsonNode>>不应该有这样的方法,我应该怎么解释。此外,resultOrJson突然出现,这让我感到困惑。谁能解释这个代码?

Accumulator 类有一个 map() 函数,可与 Java 8 的 Stream#map 相媲美:

https://www.playframework.com/documentation/2.5.9/api/java/play/libs/streams/Accumulator.html#map-java.util.function.Function-java.util.concurrent.Executor-

在当前上下文中,resultOrJson 变量表示一个F.Either对象,它是 lambda 函数的一部分。如果你不熟悉lambdas,我建议你阅读一下:

https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

该功能类似于应用于映射条目流的 map()。它的作用是遍历累加器中的每个 ByteString,并将 F.Either 值中的 JsonNode 对象(如果存在)映射到 User 值并将其存储在新映射中。

相关内容

最新更新