Изменить значение записи карты без замены всей записи карты - PullRequest
0 голосов
/ 03 мая 2020

В настоящее время я ищу некий DataStrucutre, похожий на Map, но с разницей в том, что значение mapentry можно редактировать.

Моя карта выглядит так: Map<String, List<String>>. Но иногда в коде я хочу добавить элемент в список записи карты. Но это не работает, потому что я думаю, что не могу отредактировать значение записи карты, не заменив всю запись на replace или put.

. Есть ли какая-то похожая DataStructure, которая выглядит как Карта, но я могу изменить значение записи?

Код:

for(String p : paths){
            String[] arr = p.split("\\\\", 2);
            //achtung was tun wen p nur ein element nur mehr ist und keine File.seperator besitzt???
            List<String> list = geteilt.get(arr[0]);

            if(list != null){
                if(arr.length > 1){
                    //Here is my problem. I want to add a String to the list
                    list.add(arr[1]);

                }
            } else {
                if(arr.length > 1){
                    geteilt.put(arr[0], List.of(arr[1]));
                } else {
                    geteilt.put(arr[0], List.of());
                }
            }

        }

Ответы [ 3 ]

1 голос
/ 03 мая 2020

Я думаю, что я не могу отредактировать значение записи карты, не заменив всю запись на replace или put.

Это не правильно. Ниже приведен пример, подтверждающий это:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, List<String>> map = Map.of("abc", new ArrayList<>(Arrays.asList("a", "b")), "xyz",
                new ArrayList<>(Arrays.asList("x", "y", "z")));
        System.out.println("Original: " + map);

        map.get("abc").set(1, "c");
        map.get("abc").add("p");
        System.out.println("Updated: " + map);
    }
}

Вывод:

Original: {xyz=[x, y, z], abc=[a, b]}
Updated: {xyz=[x, y, z], abc=[a, c, p]}
0 голосов
/ 03 мая 2020

Если вы используете java 8 или выше, вы можете использовать compute или computeIfPresent. Например:

        Map<String, List<String>> test = new HashMap<>();
        test.put("1", Arrays.asList("a", "b", "c"));
        test.put("2", Arrays.asList("a", "b", "c"));

        System.out.println(test); // prints {1=[a, b, c], 2=[a, b, c]}
        test.computeIfPresent("1", (k, v) -> {
            v.set(2, "changed");
            return v;
        });
        System.out.println(test); // prints {1=[a, b, changed], 2=[a, b, c]}

Если вы используете любую старую версию java, я предлагаю использовать метод util.

0 голосов
/ 03 мая 2020

Вам не нужна новая структура данных специально для вашего случая, т. Е. Map >

Для редактирования записи Map:

  1. Получите значение для ключа, который вы хотите изменить.

  2. Возвращенное значение будет List, вы можете изменить это значение с помощью обычного метода list, и изменение будет отражено как Map значения просто ссылаются на список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...