【发布时间】:2019-05-18 19:34:12
【问题描述】:
我有一张地图,其中的值是一个集合。给定一个键,我想删除集合的一个元素并返回它,但如果集合为空,我也想删除该条目。有没有办法使用 Java 8 的众多新 Map 方法之一在短时间内完成此操作?
一个简单的例子(我使用堆栈,但它可以是列表、集合等)。举例来说,假设已经检查了映射是否包含键。
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() 返回的值。
【问题讨论】:
-
看不出有什么理由在这里使用 streams/lambda。
-
@NicholasK 唯一的好处是映射到 null 并自动删除条目 IMO,否则,我将不得不同意
-
我不确定这会有多通用,但something like this 怎么样?
标签: java dictionary collections java-8 hashmap