Java 在集合视图中迭代Hashmap

Java 在集合视图中迭代Hashmap,java,algorithm,selenium,data-structures,hashmap,Java,Algorithm,Selenium,Data Structures,Hashmap,有一个由与m个键关联的n个值组成的映射。我从WebElements获取键和相关值。到目前为止 键:[1,2,3] 值:[A、B、C、D、E、F、G] 但问题是, 键[1]:值[A,B,C]键[2]:值[C,D,E]键[3]:值[F,G,H] 因此,单个键与值的数量相关联。参见下面的示例 <tr key="key1" > <td x=""value1"> <td y=""value2"> <td z=""value3">

有一个由与m个键关联的n个值组成的映射。我从WebElements获取键和相关值。到目前为止
键:[1,2,3]
值:[A、B、C、D、E、F、G]
但问题是,
键[1]:值[A,B,C]
键[2]:值[C,D,E]
键[3]:值[F,G,H]
因此,单个键与值的数量相关联。参见下面的示例

<tr key="key1" >
    <td x=""value1">
    <td y=""value2">
    <td z=""value3">
   </tr>
   <tr key="key2" >
    <td x="a">
    <td y="b">
    <td z="c">
 </tr>


按如下方式定义您的
地图

Map<String, String[]> tds = new HashMap<String,String[]>();
Map tds=newhashmap();

这样,对于每个键,您可以拥有一个值数组。

如果我理解您的问题,那么您可以

Map<String, List<String>> map = new HashMap<String, List<String>>();
// Or use 'Set' in place of 'List' if values are unique for a given key.

// putting values in map
List<String> list = new ArrayList<String>();
list.add("key1 String1");
list.add("key1 String2");
list.add("key1 String3");
map.put("key1", list);

list = new ArrayList<String>();
list.add("key2 String1");
list.add("key2 String2");
list.add("key2 String3");
map.put("key2", list);

list = new ArrayList<String>();
list.add("key3 String1");
list.add("key3 String2");
list.add("key3 String3");
map.put("key3", list);

//adding another value for key1
list = map.get("key1");
list.add("key1 String4");

// fetching from map
// list = map.get("key1");
System.out.println(map.get("key1")); // prints : [key1 String1, key1 String2, key1 String3, key1 String4]
System.out.println(map.get("key2")); // prints : [key2 String1, key2 String2, key2 String3]
System.out.println(map.get("key3")); // prints : [key3 String1, key3 String2, key3 String3]
Map Map=newhashmap();
//如果给定键的值是唯一的,则使用“Set”代替“List”。
//将值放入地图
列表=新的ArrayList();
列表。添加(“键1字符串1”);
列表。添加(“键1-2”);
列表。添加(“键1-3”);
地图放置(“键1”,列表);
列表=新的ArrayList();
列表。添加(“键2字符串1”);
列表。添加(“键2字符串2”);
列表。添加(“键2和键3”);
地图放置(“键2”,列表);
列表=新的ArrayList();
列表。添加(“键3字符串1”);
列表。添加(“键3-2”);
列表。添加(“3号键3”);
地图放置(“键3”,列表);
//为键1添加另一个值
list=map.get(“key1”);
列表。添加(“键1-4”);
//从地图中提取
//list=map.get(“key1”);
System.out.println(map.get(“key1”);//打印:[key1 String1,key1 String2,key1 String3,key1 String4]
System.out.println(map.get(“key2”);//打印:[key2 String1,key2 String2,key2 String3]
System.out.println(map.get(“key3”);//打印:[key3 String1,key3 String2,key3 String3]

注意:HashMap不会维护键的顺序。

如果您可以使用外部库,您可以使用番石榴的。如果希望保留迭代顺序,并且没有重复项可以显示为值(针对给定的键),则使用应起作用:

Multimap<String, String> multimap = LinkedHashMultimap.create();
multimap.putAll("1", Arrays.asList("A", "B", "C"));
multimap.putAll("2", Arrays.asList("C", "D", "E"));
multimap.putAll("3", Arrays.asList("F", "G", "H"));
屈服

{1=[A, B, C], 2=[C, D, E], 3=[F, G, H]}
{1=[A,B,C],2=[C,D,E],3=[F,G,H]}也许您使用带有键和字符串数组的hasmap:
HashMap H=newhashmap()?是的,我们也在这样做。但实际上,我们无法像这样迭代;在放入hashmap之前,我们如何告诉map对象特定的键作为字符串对象保存了大量的值。while(key1/key2)则String[1]=value1;字符串[2]=value2;字符串[3]=值3;在获取值时,我们需要使用其值筛选键,因此似乎在设计问题时需要获得键/值对。无法理解您需要什么:(是的,我们也在做同样的事情。但实际上我们无法遍历like;在放入hashmap之前,我们如何告诉map对象特定的键作为字符串对象保存了大量的值。while(key1/key2)然后String[1]=value1;String[2]=value2;String[3]=value3;在获取值时,我们需要用它的值过滤键,因此设计问题的方式似乎是获取键/值pairI已经更新了我的答案。我将值放入map并从中检索。实际上问题是如何将这些键存储到一个对象中,以便我们可以传递到hashmap键。在hashmap键之前是值的列表。键是值的列表,我无法硬编码,因此请您建议我如何使用putAll()方法如果键在值的列表中,您如何事先知道键->值映射?
{1=[A, B, C], 2=[C, D, E], 3=[F, G, H]}