如何遍历哈希映射表?
如何遍历哈希映射表?
我有这个字段:
HashMapselects = new HashMap ();
对于每个Hash
,我需要创建一个ComboBox
,其项目是HashMap
的值(它恰好是一个HashMap本身)。
通过(不起作用的)示例:
for (int i=0; i < selects.size(); i++) { HashMap h = selects[i].getValue(); ComboBox cb = new ComboBox(); for (int y=0; y < h.size(); i++) { cb.items.add(h[y].getValue); } }
我有以下字段:
HashMapselects = new HashMap ();
对于每个Hash
,我需要创建一个ComboBox
,其项目是HashMap
的值(它恰好是一个HashMap本身)。
示例代码(非功能性):
for (int i=0; i < selects.size(); i++) { HashMap h = selects[i].getValue(); ComboBox cb = new ComboBox(); for (int y=0; y < h.size(); i++) { cb.items.add(h[y].getValue); } }
问题的原因是代码中存在一些不明确的地方,导致读者对于如何遍历HashMap的方式产生疑问。解决方法是提供更清晰的代码示例和解释,以帮助读者更好地理解如何遍历HashMap。
以下是解决方法的代码示例和解释:
Map> selects = new HashMap >(); // 遍历外部HashMap的值 for (HashMap h : selects.values()) { ComboBox cb = new ComboBox(); // 遍历内部HashMap的值,并将其添加到ComboBox中 for (String s : h.values()) { cb.items.add(s); } }
这段代码首先创建了一个外部的HashMap,其中的值是内部的HashMap。然后,通过使用`selects.values()`方法,我们可以遍历外部HashMap的值。在每次循环中,我们创建了一个ComboBox,并通过使用`h.values()`方法,遍历内部HashMap的值,并将其添加到ComboBox中。
这样,我们就可以通过遍历HashMap的方式,将内部HashMap的值添加到ComboBox中。通过提供更清晰的代码示例和解释,我们帮助读者更好地理解了如何遍历HashMap。
在Java 1.8(Java 8)中,通过使用聚合操作(流操作)中的forEach方法,这变得更加容易,它类似于Iterable接口中的迭代器。只需将下面的语句复制粘贴到您的代码中,并将HashMap变量从hm重命名为您的HashMap变量以打印出键值对。
HashMaphm = new HashMap (); /* * Logic to put the Key,Value pair in your HashMap hm */ // Print the key value pair in one line. hm.forEach((k,v) -> System.out.println("key: "+k+" value:"+v));
下面是使用Lambda表达式的示例:
HashMaphm = new HashMap (); Random rand = new Random(47); int i=0; while(i<5){ i++; int key = rand.nextInt(20); int value = rand.nextInt(50); System.out.println("Inserting key: "+key+" Value: "+value); Integer imap =hm.put(key,value); if( imap == null){ System.out.println("Inserted"); } else{ System.out.println("Replaced with "+imap); } } hm.forEach((k,v) -> System.out.println("key: "+k+" value:"+v));
输出:
Inserting key: 18 Value: 5 Inserted Inserting key: 13 Value: 11 Inserted Inserting key: 1 Value: 29 Inserted Inserting key: 8 Value: 0 Inserted Inserting key: 2 Value: 7 Inserted key: 1 value:29 key: 18 value:5 key: 2 value:7 key: 8 value:0 key: 13 value:11
还可以使用Spliterator进行相同的操作。
Spliterator sit = hm.entrySet().spliterator();
UPDATE
在Oracle文档中包含了文档链接。
想要了解更多关于Lambda的内容,请访问此链接,必须阅读Aggregate Operations,以及关于Spliterator,请访问此链接。
我猜想在lambda体外部使用在lambda体内部声明的变量时,我们不能将它们声明为final。与Groovy中的闭包不同,使用变量在lambda体外部定义时,会出现Local variable schedule defined in an enclosing scope must be final or effectively final的错误。
使用lambda的缺点是您不能在lambda内部返回其他方法。
在这里使用spliterator的用途是什么?您正在使用并行流吗?
如果您正在使用Android,这里提到的forEach调用需要API级别24。
在这段代码中,作者想要遍历一个HashMap,并对其中的每个键值对进行操作。然而,作者提到自己经常遗忘如何正确地编写这段代码,因此总是会返回这个相同的答案。所以,这个问题的出现是因为作者对如何遍历HashMap不够熟悉,需要参考之前的代码来进行实现。
解决方法是使用Map的entrySet()方法来获取键值对的集合,然后使用for-each循环来遍历该集合。在循环中,通过entry.getKey()方法获取键,通过entry.getValue()方法获取值,进而对键值对进行相应的操作。作者还提到,在编写代码时,只需输入"yourmap.entrySet().for",IDE的自动补全功能就会帮助完成剩余的代码。
为了遍历HashMap,可以使用Map的entrySet()方法来获取键值对的集合,并通过for-each循环来遍历该集合。这样就可以对每个键值对进行操作。如果不熟悉如何编写这段代码,可以参考之前的代码或者使用IDE的自动补全功能来完成。