[英]How to remove from a HashMap if value is present in Java 8 style
有一个Map<String, List<String>>
。 如果Map
包含键,我想从List
删除一个值。
但有没有办法用Java 8风格做到这一点? 就像使用计算,合并或其他一些新方法?
以旧样式方式从List中删除元素的代码:
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-ify的一切。 你的代码很好。 但是,如果你愿意,Karol的建议很好,这是另一个:
Optional.ofNullable(map.get("key1")).ifPresent(v -> v.remove("a2"));
关于这是否是对Optional
的错误使用,意见不一。 它当然不是它的主要用途,但我觉得它是可以接受的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.