如何遍历哈希映射表?

13 浏览
0 Comments

如何遍历哈希映射表?

我有这个字段:

HashMap selects = 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 selects = 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);
    }
}

0
0 Comments

问题的原因是代码中存在一些不明确的地方,导致读者对于如何遍历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。

0
0 Comments

在Java 1.8(Java 8)中,通过使用聚合操作(流操作)中的forEach方法,这变得更加容易,它类似于Iterable接口中的迭代器。只需将下面的语句复制粘贴到您的代码中,并将HashMap变量从hm重命名为您的HashMap变量以打印出键值对。

HashMap hm = 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表达式的示例:

HashMap hm = 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。

0
0 Comments

在这段代码中,作者想要遍历一个HashMap,并对其中的每个键值对进行操作。然而,作者提到自己经常遗忘如何正确地编写这段代码,因此总是会返回这个相同的答案。所以,这个问题的出现是因为作者对如何遍历HashMap不够熟悉,需要参考之前的代码来进行实现。

解决方法是使用Map的entrySet()方法来获取键值对的集合,然后使用for-each循环来遍历该集合。在循环中,通过entry.getKey()方法获取键,通过entry.getValue()方法获取值,进而对键值对进行相应的操作。作者还提到,在编写代码时,只需输入"yourmap.entrySet().for",IDE的自动补全功能就会帮助完成剩余的代码。

为了遍历HashMap,可以使用Map的entrySet()方法来获取键值对的集合,并通过for-each循环来遍历该集合。这样就可以对每个键值对进行操作。如果不熟悉如何编写这段代码,可以参考之前的代码或者使用IDE的自动补全功能来完成。

0