Ric*_*ola 11 java collections dictionary hashmap java-8
我有一个地图,其值是一个集合.给定一个键,我想删除该集合的一个元素并将其返回,但如果该集合为空,我还想删除该条目.有没有办法使用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;
}
Run Code Online (Sandbox Code Playgroud)
我试过做类似的事情
map.compute(1, (k, v) -> {v.pop(); return v.size() == 0 ? null : v;});
Run Code Online (Sandbox Code Playgroud)
但即使它确实删除了条目,如果为空,我不知道如何获取返回的值pop()
.
嗯,它甚至比你现有的还要丑陋,但是有一种方法,我想:
public static String removeOne(Map<Integer, Stack<String>> 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];
}
Run Code Online (Sandbox Code Playgroud)
问题是merge/compute
等等返回值,并且在您的情况下是Stack/Set/List
该集合中的一个,而不是单个元素.
有没有一种方法可以使用 Java 8 的众多新 Map 方法之一以简短的方式完成此操作?
从 JDK8 开始,没有任何新方法可以改进代码,无论是在可读性还是效率方面。
如果您这样做是为了自己练习,那么我可以在某种程度上理解为什么您想要缩短代码(如果可能的话),但是当涉及到生产代码时,应该避免打高尔夫球,而是采用以下方法:最具可读性和可维护性;如果更长也没关系。
你的方法本身就很好。
归档时间: |
|
查看次数: |
301 次 |
最近记录: |