有一个Map<String, List<String>>
。如果List
包含密钥,我想从Map
中删除一个值。
但是有没有办法采用 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;
}
}
答案 0 :(得分:8)
您可以使用Map.computeIfPresent()
,但改进之处值得怀疑:
map.computeIfPresent("key1", (k, v) -> { v.remove("a2"); return v; });
答案 1 :(得分:4)
我们不必对Java-8进行所有处理。您的代码可以正常使用。但是,如果您愿意,Karol的建议很好,这是另一个建议:
Optional.ofNullable(map.get("key1")).ifPresent(v -> v.remove("a2"));
关于这是否是错误使用Optional
的意见不一。当然,它不是主要用途,但我认为它可以接受。