作者:百变精灵110 | 来源:互联网 | 2022-11-24 16:39
我有一个地图,其值是一个集合.给定一个键,我想删除该集合的一个元素并将其返回,但如果该集合为空,我还想删除该条目.有没有办法使用Java 8的众多新Map方法之一以简短的方式完成此操作?
一个简单的例子(我使用Stack但它可以是List,Set等).为了示例,我们假设已经检查了地图包含密钥.
public static String removeOne(Map> map, int key) {
Stack stack = map.get(key);
String result = stack.pop();
if(stack.isEmpty()){
map.remove(key);
}
return result;
}
我试过做类似的事情
map.compute(1, (k, v) -> {v.pop(); return v.size() == 0 ? null : v;});
但即使它确实删除了条目,如果为空,我不知道如何获取返回的值pop()
.
1> Eugene..:
嗯,它甚至比你现有的还要丑陋,但是有一种方法,我想:
public static String removeOne(Map> map, int key) {
String[] removed = new String[1];
map.compute(key, (k, v) -> {
removed[0] = v.pop();
return v.size() == 0 ? null : v;
});
return removed[0];
}
问题是merge/compute
等等返回值,并且在您的情况下是Stack/Set/List
该集合中的一个,而不是单个元素.
哈哈哈,我实际上想过这个解决方案,但正如你所说,它真的很难看.