我有一个值为集合类型的地图。给定一个键,我想要删除集合中的一个元素并返回它,但如果集合为空,我也想要删除对应的键值对。在Java 8的众多新的Map方法中,是否有一种简短的方法可以做到这一点?
这里有一个简单的例子(我使用了一个Stack,但也可以是List、Set等等)。为了举例,假设已经检查过地图包含该键。
public static String removeOne(Map<Integer, Stack<String>> map, int key) {
Stack<String> 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()
返回的值。