在Play Java的the official documentation中,我看到了这段代码。
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);
}
我不明白map
和resultOrJson
是什么?
虽然实例Accumulator<ByteString, F.Either<Result, JsonNode>>
不应该有这样的方法,但我应该解释什么呢。另外,resultOrJson
突然出现,这让我感到困惑。
任何人都可以解释一下这段代码吗?
答案 0 :(得分:0)
Accumulator类有一个map()函数,可与Java 8的Stream#map相媲美:
在当前上下文中, resultOrJson 变量表示F.Either
对象,它是lambda函数的一部分。如果你不熟悉lambdas,我建议你阅读:
https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
该功能类似于应用于Map条目流的map()。它的作用是基本上遍历累加器中的每个ByteString,并将{{1>}值中的JsonNode对象(如果存在)映射到User值并将其存储在新映射中。 / p>