返回在 map.forEach 中定义的值
Posted
技术标签:
【中文标题】返回在 map.forEach 中定义的值【英文标题】:Return a value that was defined in map.forEach 【发布时间】:2022-01-20 10:16:02 【问题描述】:我有一个名为 map 的地图作为参数传递给函数 maptojson 函数我想为地图的每个 k,v 返回 json 我有以下代码。它显示以下指向 json 的错误“局部变量 inputJson在封闭范围内定义的必须是最终的或有效的最终”
public static JSONObject maptojson(Map map)
JSONObject Jsonobj = null;
map.forEach(
(k, v) ->
Jsonobj = new JSONObject();//Local variable Jsonobj defined in an enclosing
scope must be final or effectively final
Jsonobj.put("key", k);
Jsonobj.put(val, v);
);
return Jsonobj;
【问题讨论】:
【参考方案1】:不要返回null
。而是返回一个空的JSONObject
来表示“空”。然后,您可以删除 lambda 中发生的分配。
【讨论】:
【参考方案2】:你可以使用:
new JSONObject(map);
这仅适用于您的地图为 Map<String, String>
但您可以将地图从 Map<Object, Object>
映射(如 stream::map
)到 Map<String,String>
【讨论】:
我的地图是 Map使用 for 循环,这样会更容易。在较新的 Java 版本中不弃用 for 循环是有原因的。
public static JSONObject maptojson(Map map)
JSONObject jsonobj = null;
for(String key:map.keySet())
jsonobj = new JSONObject();
jsonobj.put(key, k);
val = map.get(key);
jsonobj.put(val, v);
return Jsonobj;
【讨论】:
【参考方案4】:在这种情况下,命令式代码更好,但即使你想使用 java 8,你也可以尝试如下:
public static JsonObject maptojson(Map<String, String> map)
final JsonObject obj = new JsonObject();
final JsonObject obj1 = new JsonObject();
return map.entrySet()
.stream()
.map(entry ->
obj.addProperty("key", entry.getKey());
obj.addProperty("val", entry.getValue());
return obj;
)
.reduce(obj1, (o1, o2) ->
o1.addProperty(o2.get("key").getAsString(), o2.get("val").getAsString());
return o1;
);
【讨论】:
以上是关于返回在 map.forEach 中定义的值的主要内容,如果未能解决你的问题,请参考以下文章
如何形象地解释 JavaScript 中 map,foreach,reduce 间的区别
map、foreach、reduce、filters的用法及区别
every();some();filter();map();forEach()各自区别: