如果值以 Java 8 样式存在,如何从哈希映射中删除



有一个Map<String, List<String>> .如果Map包含键,我想从List中删除一个值。

但是有没有办法在Java 8风格中做到这一点?比如使用计算、合并或其他一些新方法?

以旧样式方式从列表中删除元素的代码:

public class TestClass {

    public static void main(String[] args) {
        Map<String, List<String>> map = new HashMap<>();
        map.put("key1", getList());
        map.put("key2", getList());
        //remove
        if (map.containsKey("key1")) {
            map.get("key1").remove("a2");
        }
        System.out.println(map);
    }
    public static List<String> getList(){
        List<String> arr = new ArrayList<String>();
        arr.add("a1");
        arr.add("a2");
        arr.add("a3");
        arr.add("a4");
        return arr;
    }   
}
您可以使用

Map.computeIfPresent()但改进值得怀疑:

map.computeIfPresent("key1", (k, v) -> { v.remove("a2"); return v; });

我们不必把所有东西都Java-8化。你的代码就目前而言很好。但是,如果您愿意,Karol 的建议很好,这是另一个:

    Optional.ofNullable(map.get("key1")).ifPresent(v -> v.remove("a2"));

关于这是否是对Optional的错误使用,意见不一。这当然不是它的主要用途,但我觉得它是可以接受的。

最新更新