【问题标题】:Iterating over the Hashmap in Set views在 Set 视图中迭代 Hashmap
【发布时间】:2015-10-29 12:25:06
【问题描述】:

有一个 Map 包含与 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>

如何设计hashmap,它将查看与集合视图中特定键关联的值。 例如:键[1]:值[A,B,C]
键[2]:值[C,D,E]
键[3]:值[F,G,H]

提前感谢您的意见。

【问题讨论】:

  • 也许您使用带有键和字符串数组的 hasmap:HashMap&lt;String,String[]&gt; h = new HashMap&lt;String,String[]&gt;(); ?

标签: java algorithm selenium data-structures hashmap


【解决方案1】:

如下定义您的Map

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

这样每个键都可以有一个值数组。

【讨论】:

  • 是的,我们也在做同样的事情。但实际上我们无法遍历like;在放入 hashmap 之前,我们如何告诉 map 对象特定的键将值的数量作为 String 对象保存。 while (key1/key2) 然后 String[1] = value1;字符串[2]=值2;字符串[3]=值3;在获取值时,我们需要用它的值过滤键,所以它似乎以获取键/值对的方式设计问题。
  • 无法理解您需要什么。 :(
【解决方案2】:

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

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]

注意: HashMap 不会保持键的顺序。

【讨论】:

  • 是的,我们也在做同样的事情。但实际上我们无法遍历like;在放入 hashmap 之前,我们如何告诉 map 对象特定的键将值的数量作为 String 对象保存。 while (key1/key2) 然后 String[1] = value1;字符串[2]=值2;字符串[3]=值3;在获取值时,我们需要用它的值过滤键,所以似乎设计问题的方式是获取键/值对
  • 我已经更新了我的答案。我将值放入地图并从中检索相同的值。
【解决方案3】:

如果您可以使用外部库,则可以使用 Guava 的 Multimap 来实现。如果您想保留迭代顺序并且没有重复项可以作为值出现(针对给定键),则使用 LinkedHashMultimap 应该可以:

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"));

用这个测试

System.out.println(multimap);

产量

{1=[A, B, C], 2=[C, D, E], 3=[F, G, H]}

【讨论】:

  • 其实问题是如何将这么多的keys存储到一个对象中,这样我们就可以传入hashmap的keys。在 hashmap 键之前,它们是值列表。键是值列表,我无法硬编码,所以请你建议我如何使用 putAll() 方法
  • 如果您的键在值列表中,您如何事先知道键->值映射?
猜你喜欢
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 2015-09-19
相关资源
最近更新 更多