добавить элементы на карту, если картакарта ... в Яве - PullRequest
0 голосов
/ 23 октября 2019

У меня есть коллекция Map, которая отображает String на Stack<Integer, как я могу положить свои стеки на эту карту? Я пробовал это до сих пор, но не смог.

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

Ответы [ 5 ]

2 голосов
/ 23 октября 2019

Вы можете использовать метод computeIfAbsent () , который был добавлен в Java 8:

Map<String, Stack<Integer>> map=new HashMap<>();
map.computeIfAbsent("abc", k -> new Stack<>()).push(123);
1 голос
/ 23 октября 2019

Ваша реализация здесь неверна. Сначала вы должны создать объект типа 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);
1 голос
/ 23 октября 2019

Поскольку 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]}
0 голосов
/ 23 октября 2019

используйте это:

BiFunction<Stack<Integer>, Integer, Stack<Integer>> bi = (s, i) -> {
        s.push(i);
        return s;
    };

    map.put("abc", bi.apply(map.get("abc"), 134));
0 голосов
/ 23 октября 2019

Сначала вам нужно получить стек, который вы хотите обновить, затем вам нужно обновить стек новым элементом и, наконец, использовать свойство map, которое заменяет элементы, карта уже существует.

Stack<Integer> st = map.getOrDefault("abc",new Stack<Integer>());
st.push(123);
map.put("abc",st);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...