如何使用点表示法删除嵌套映射中的嵌套条目

Sun*_*eel 1 java

我有一个嵌套的地图,像这样: map.get("employee").get("address").remove("city")

有没有办法使用“employee.address.city”之类的键删除城市条目?所以我正在寻找类似的东西MapUtil.remove(map,"employee.address.city")

Ale*_*ler 5

Java 8 库Dynamics可以做到这一点,它包装了一个嵌套的映射/集合(以及其他类型)结构,并允许在没有静态类型的情况下进行空安全推理。

Dynamic.from(map).get("employee").get("address").asMap().remove("city");
Run Code Online (Sandbox Code Playgroud)

我们包装地图以获取我们的 Dynamic 实例,#get 现在返回其他 Dynamic 实例,表示该子项或该子项不存在。因此,这是空安全的。

为方便起见,我们还可以使用 #dget 将一个 get 拆分为多个,也许 #maybe 可以处理员工或地址无一例外不存在的情况:

Dynamic.from(map).dget("employee.address")
    .maybe().asMap()
    .ifPresent(address -> address.remove("city"));
Run Code Online (Sandbox Code Playgroud)

查看更多示例https://github.com/alexheretic/dynamics