在Java中如果Map <String,Stack <Integer >> map ...添加元素以进行映射

时间:2019-10-23 07:18:47

标签: java collections

我有一个Map集合,该集合将String映射到Stack<Integer,如何将堆栈放置到此映射中? 到目前为止,我已经尝试过了,但是没有成功。

Map<String,Stack<Integer>> map=new HashMap<>();
map.put("abc",new Stack<Integer>().push(123));

5 个答案:

答案 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后,您必须创建该类型的Objectpush的返回类型本身就是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));