How to for each the hashmap?
我有这个领域:
对于每个
通过(不起作用)演示:
1 2 3 4 5 6 7 8 | 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); } } |
我知道我有点晚了,但我也会分享我的所作所为,以防它对其他人有所帮助:
1 2 3 4 5 6 7 8 9 |
Lambda Expression Java 8
在Java 1.8(Java 8)中,通过使用类似于迭代接口的迭代器的聚合操作(流操作),这变得更加容易。
只需将下面的粘贴语句复制到代码中,并将hashmap变量从hm重命名为hashmap变量,即可打印出键值对。
1 2 3 4 5 6 7 |
下面是使用lambda表达式的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | HashMap<Integer,Integer> hm = new HashMap<Integer, Integer>(); 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)); Output: 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 |
也可以使用拆分器。
1 | Spliterator sit = hm.entrySet().spliterator(); |
更新
包括指向Oracle文档的文档链接。有关lambda的更多信息,请转到此链接,并且必须读取聚合操作;对于spliterator,请转到此链接。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
可以使用迭代器迭代
1 2 3 4 5 6 7 8 9 |
流Java 8
随着EDCOX1×3的方法接受lambda表达式,我们也得到了流API,在Java 8中。
迭代条目(使用foreach和streams):
1 2 3 4 5 6 7 8 9 10 11 | sample.forEach((k,v) -> System.out.println(k +"=" + v)); sample.entrySet().stream().forEachOrdered((entry) -> { Object currentKey = entry.getKey(); Object currentValue = entry.getValue(); System.out.println(currentKey +"=" + currentValue); }); sample.entrySet().parallelStream().forEach((entry) -> { Object currentKey = entry.getKey(); Object currentValue = entry.getValue(); System.out.println(currentKey +"=" + currentValue); }); |
流的优点是它们可以很容易地并行化,并且在我们有多个CPU可供使用时非常有用。我们只需要使用
为什么
流也提供了
我通常与cx42net做相同的工作,但是我没有显式地创建一个条目。
1 2 3 4 5 6 7 8 9 10 |
这对我来说似乎是最直观的,我认为我对迭代地图的值有偏见。
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | /** *Output: D: 99.22 A: 3434.34 C: 1378.0 B: 123.22 E: -19.08 B's new balance: 1123.22 */ import java.util.HashMap; import java.util.Map; import java.util.Set; public class MainClass { public static void main(String args[]) { HashMap<String, Double> hm = new HashMap<String, Double>(); hm.put("A", new Double(3434.34)); hm.put("B", new Double(123.22)); hm.put("C", new Double(1378.00)); hm.put("D", new Double(99.22)); hm.put("E", new Double(-19.08)); Set<Map.Entry<String, Double>> set = hm.entrySet(); for (Map.Entry<String, Double> me : set) { System.out.print(me.getKey() +":"); System.out.println(me.getValue()); } System.out.println(); double balance = hm.get("B"); hm.put("B", balance + 1000); System.out.println("B's new balance:" + hm.get("B")); } } |
请参阅以下完整示例:
- http://www.java2s.com/code/javaapi/java.util/hashmapentryset.htm(http://www.java2s.com/code/javaapi/java.util/hashmapentryset.htm)