我有一个Map
集合,该集合将String
映射到Stack<Integer
,如何将堆栈放置到此映射中?
到目前为止,我已经尝试过了,但是没有成功。
Map<String,Stack<Integer>> map=new HashMap<>();
map.put("abc",new Stack<Integer>().push(123));
答案 0 :(得分:2)
您可以使用Java 8中添加的 computeIfAbsent()方法:
Map<String, Stack<Integer>> map=new HashMap<>();
map.computeIfAbsent("abc", k -> new Stack<>()).push(123);
答案 1 :(得分:1)
由于Stack#push方法在此处返回Integer
。您可以通过以下方式修改代码来实现它:
Map<String, Stack<Integer>> map=new HashMap<>();
Stack<Integer> stack = new Stack<>();
stack.push(123);
map.put("abc", stack);
更新:
查看您对我的回答的评论。我认为您想完成这样的事情:
Map<String, Deque<Integer>> map = new HashMap<>();
Deque<Integer> deque = new ArrayDeque<>(); // use Deque instead of Stack
map.put("abc", deque); // putting the Deque in Map
map.get("abc").add(12);
map.get("abc").add(34);
map.get("abc").add(56);
map.get("abc").add(78);
System.out.println("Before removing: " + map);
map.get("abc").remove(); // removing first element
System.out.println("After removing: " + map);
输出:
Before removing: {abc=[12, 34, 56, 78]}
After removing: {abc=[34, 56, 78]}
答案 2 :(得分:1)
您的实现在这里是错误的。您必须先创建Stack<Integer>
类型的对象。将Stack<Integer>
指定为values
后,您必须创建该类型的Object
。 push
的返回类型本身就是type
,因此在您的情况下会导致错误。
Map<String,Stack<Integer>> map=new HashMap<>();
Stack<Integer> stack = new Stack<Integer>();
stack.push(123);
map.put("abc",stack);
答案 3 :(得分:0)
首先,您需要获取要更新的堆栈,然后需要使用新元素更新堆栈,最后使用已经存在的map的属性来替换元素。
Stack<Integer> st = map.getOrDefault("abc",new Stack<Integer>());
st.push(123);
map.put("abc",st);
答案 4 :(得分:0)
使用此:
BiFunction<Stack<Integer>, Integer, Stack<Integer>> bi = (s, i) -> {
s.push(i);
return s;
};
map.put("abc", bi.apply(map.get("abc"), 134));