Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java8集合中,映射如何存储重复键和不同的值_Java - Fatal编程技术网

在Java8集合中,映射如何存储重复键和不同的值

在Java8集合中,映射如何存储重复键和不同的值,java,Java,我有一个字符串,用:,在Java8+中如何分割字符串并存储在Map中 字符串Str=Member:Test1,Member:Test2,归纳法:Value,Name:Sam,Name:Sun Java映射应将键作为成员,值作为Test1、Test2,名称作为键,值作为Sam、Sun。唯一键 根据定义,不能使用同一个键存储多个条目 引用Javadoc的第二句话: 地图不能包含重复的键;每个键最多可以映射到一个值 对于重复项,可以使用LinkedList、Stack或ArrayQue Map和Set

我有一个字符串,用:,在Java8+中如何分割字符串并存储在Map中

字符串Str=Member:Test1,Member:Test2,归纳法:Value,Name:Sam,Name:Sun

Java映射应将键作为成员,值作为Test1、Test2,名称作为键,值作为Sam、Sun。

唯一键 根据定义,不能使用同一个键存储多个条目

引用Javadoc的第二句话:

地图不能包含重复的键;每个键最多可以映射到一个值


对于重复项,可以使用LinkedList、Stack或ArrayQue


Map和Set不存储重复的键值。

要实现此行为,可以考虑使用apachecommons集合

   <dependency>
   <groupId>org.apache.commons</groupId>
       <artifactId>commons-collections4</artifactId>
       <version>4.1</version>
   </dependency>
并使用多值映射。

您可以使用如下所示的映射来执行此操作:

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

class Main {
    public static void main(String[] args) {
        String str = "Member:Test1,Member:Test2,Induction:Value,Name:Sam,Name:Sun";
        String[] arr = str.split(",");
        Map<String, List<String>> map = new HashMap<>();
        for (String s : arr) {
            String[] keyVal = s.split(":");
            if (keyVal.length == 2) {
                List<String> list = map.get(keyVal[0]);
                if (list == null) {
                    map.put(keyVal[0], new ArrayList<>(List.of(keyVal[1])));
                } else {
                    list.add(keyVal[1]);
                }
            }
        }

        System.out.println(map);
    }
}
逻辑是在上拆分字符串,。然后,迭代生成的数组,并在上再次从数组中拆分每个字符串:。这将提供要添加到列表中的键和值。如果该列表已经存在,请将该值添加到该列表中,或使用该值实例化一个新列表

{Induction=[Value], Member=[Test1, Test2], Name=[Sam, Sun]}