Java 编辑地图条目的值而不替换整个地图条目

Java 编辑地图条目的值而不替换整个地图条目,java,dictionary,data-structures,collections,Java,Dictionary,Data Structures,Collections,我目前正在搜索一些类似于地图的数据结构,但其差异在于,地图条目的值是可编辑的 我的地图如下所示:map。但有时在代码中,我想将一个项目添加到映射条目的列表中。但这不起作用,因为我认为如果不使用replace或put替换整个条目,我就无法编辑地图条目的值 是否有一些类似的数据结构看起来像Map,但我可以编辑条目的值 代码: for(字符串p:路径){ 字符串[]arr=p.split(“\\\\”,2); //这是一个文件中的元素。是否有其他文件??? List List=geteilt.get(

我目前正在搜索一些类似于地图的数据结构,但其差异在于,地图条目的值是可编辑的

我的地图如下所示:
map
。但有时在代码中,我想将一个项目添加到映射条目的列表中。但这不起作用,因为我认为如果不使用
replace
put
替换整个条目,我就无法编辑地图条目的值

是否有一些类似的数据结构看起来像Map,但我可以编辑条目的值

代码:

for(字符串p:路径){
字符串[]arr=p.split(“\\\\”,2);
//这是一个文件中的元素。是否有其他文件???
List List=geteilt.get(arr[0]);
如果(列表!=null){
如果(arr.length>1){
//这是我的问题。我想在列表中添加一个字符串
列表。添加(arr[1]);
}
}否则{
如果(arr.length>1){
geteilt.put(arr[0],List.of(arr[1]);
}否则{
geteilt.put(arr[0],List.of());
}
}
}

您不需要任何专门针对您的案例的新数据结构,即Map>

要编辑地图条目,请执行以下操作:

  • 获取要修改的键的值

  • 返回的值将是List。您可以使用常用的List方法修改此值,并且更改将反映为映射值仅引用列表


  • 如果您使用的是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]}
    
    Map test=newhashmap();
    测试.put(“1”,数组.asList(“a”,“b”,“c”);
    测试.put(“2”,数组.asList(“a”,“b”,“c”);
    系统输出打印LN(测试);//打印{1=[a,b,c],2=[a,b,c]}
    测试。计算呈现(“1”,(k,v)->{
    v、 第(2)组,“变更”);
    返回v;
    });
    系统输出打印LN(测试);//打印{1=[a,b,changed],2=[a,b,c]}
    
    如果您正在使用任何旧版本的java,我的建议是使用util方法

    我想如果不替换 用
    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);
        }
    }
    

    请添加您的代码,并描述哪些代码对您不起作用。我的代码不起作用,因为我使用的是
    List.of()
    。您正在使用
    新的ArrayList(Arrays.asList(此处有一些内容)
    ,这很有效。谢谢
    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]}