使用Java 8 lambda迭代映射键

Mac*_*tow 1 java lambda java-8

我有一个嵌套的地图 Map<String, Map<String, Map<String, ...>

我如何使用Java 8 lambdas在地图上导航.这里可能的必要解决方案:

Object getObjectWithKey(String key) { // key = "parent.parent1.parent1.1"
    Map head = mainMap;

    for (String k in key.split(".")){
      head = head.get(k);
    }

    return (Object) head;
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*ton 5

正如评论中所指出的那样,我完全不了解这一点.应将json文档转换为适当类型的Java对象,而不是某些高度嵌套的对象Map<String, Map<String, Map<String, ...>>>.

即使没有lambda表达式,这将需要选中铸件从ObjectMap<String, Object>,并且它可以很容易地在运行时以失败ClassCastException.

在这之上添加lambdas会增加额外的复杂性,因为lambda体中使用的变量必须是最终的,而head在每个阶段都要重新分配.你可以使用长度为1的数组来解决这个问题.

结果代码很可怕(我建议这样做),但它实现了你所要求的:

Object[] head = {mainMap};
Stream.of(key.split(".")).forEach(s -> {
    head[0] = ((Map<String, ?>) head[0]).get(s);
});
return head[0]; 
Run Code Online (Sandbox Code Playgroud)