这个问题在这里已有答案:
我有这个领域:
HashMap<String, HashMap> selects = new HashMap<String, HashMap>();
对于每个 Hash<String, HashMap>
我需要创建 ComboBox
,其项目是 HashMap <String, **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);
}
}
7 回答
在Java 1.8(Java 8)中,通过使用聚合操作中的 forEach 方法( Stream operations )看起来类似于 Iterable 接口的迭代器,这变得更加容易 .
只需将下面的语句粘贴到您的代码中,然后将 HashMap 变量从 hm 重命名为您的HashMap变量,以打印出键值对 .
以下是使用 Lambda Expression 的示例:
也可以使用 Spliterator .
UPDATE
包括Oracle Docs的文档链接 . 有关 Lambda 的详细信息,请转至link并阅读Aggregate Operations,对于Spliterator,请转至link .
如前所述,在Java 8中,我们有
forEach
方法接受lambda expression . 但我们也有stream API .Iterate over entries (Using forEach and Streams):
流的优势在于它们可以轻松并行化,并且在我们有多个CPU可用时非常有用 . 我们只需使用
parallelStream()
代替stream()
以上 . 对于并行流,使用forEach
更有意义,因为forEachOrdered
在性能上没有任何区别 . 如果我们想迭代键,我们可以使用sample.keySet()
和值sample.values()
.Why forEachOrdered and not forEach with streams ?
Streams还提供
forEach
方法,但forEach
的行为明确是不确定的,因为forEachOrdered
对此流的每个元素执行操作,如果流具有已定义的遭遇顺序,则在_560609中执行 . 所以forEach
并不保证订单会被保留 . 另请查看this以获取更多信息 .使用
entrySet
,看这里的完整例子:
Map.values()
:您可以使用迭代器迭代
HashMap
(和许多其他集合),例如:我通常和cx42net一样,但我没有明确创建一个Entry .
这对我来说似乎最直观,我认为我对迭代 Map 的值有偏见 .
我知道我有点迟到了,但我会分享我所做的,以防它帮助其他人: