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