我有这个函数:
playerList.forEach(pl ->{
JSONObject player = (JSONObject) pl;
System.out.println(player.get("UUID")+" : " + uuid+" :")
但是在线路"0"上有一个错误;返回翘曲";上面写着";意外的返回值";。为什么会发生这种情况?
就像am9417提到的那样,您的return语句位于forEach范围内,该范围是void函数,因此会出现错误。
这里有两个你可以尝试和玩的选项:
- 使用流。在这里,我使用过滤器来获取与uuid标准匹配的项/s(示例方法中的参数(。然后findFirst在最后总是得到第一个出现,假设您一直期望1个UUID匹配
// using findFirst returns an Optional type.
Optional<JSONObject> optionalPlayer = playerList
.stream()
.filter(pl -> {
JSONObject player = (JSONObject) pl;
System.out.println(player.get("UUID") + " : " + uuid + " :");
return player.get("UUID").equals(uuid);
}).findFirst();
if (optionalPlayer.isPresent()) {
return (JSONArray) optionalPlayer.get().get("warps");
}
- 使用简单的for循环:
JSONArray playerList = (JSONArray) obj;
for (Object pl: playerList) {
JSONObject player = (JSONObject) pl;
System.out.println(player.get("UUID") + " : " + uuid + " :");
if (player.get("UUID").equals(uuid)) {
return (JSONArray) player.get("warps");
}
}
您在一个匿名函数(ForEach表示playerList(中返回warps,因此ForEach的签名不匹配,从而导致错误。
您应该为流使用最可能的filter
和合适的终止符。然后只需返回从getWarps
方法收集的JSONArray。