2 ConcurrentHashMaps zusammenfügen

Looky

Erfahrenes Mitglied
Hi@all,

ich habe 2 ConcurrentHashMaps mit Key und Object. Key ist ein int. Ich möchte nun auf möglichst elegantem Wege beide Hashmaps auslesen und die Keys in ein gemeinsammes int Array schreiben.

Geht das etwas eleganter als Über die beiden Hashmaps einzelnd zu iterieren?

Zur Zeit mache ich das so, wobei status und setpoints meine Maps sind...

Java:
	datapoints = new int[(setpoints.size()+status.size())];

		
		int cnt = 0;
		Iterator<Map.Entry<Integer, Point>> it = status.entrySet().iterator();
		while(it.hasNext()){
			Map.Entry<Integer, Point> entry = it.next();
			datapoints[cnt] = entry.getKey();
			cnt++;
		}

		Iterator<Map.Entry<Integer, SetpointWrapper>> it2 = setpoints.entrySet().iterator();
		while(it2.hasNext()){
			Map.Entry<Integer, SetpointWrapper> entry = it2.next();
datapoints[cnt] = entry.getKey();
			cnt++;
		}


Danke
Christian
 
Zuletzt bearbeitet:
Hallo,

wenn du nur mit den Keys arbeitest kannst du auch über das KeySet gehen... weiterhin ist für die Arbeit mit Collections das googlecollections Framework ziemlich handy ;-)
http://code.google.com/p/google-collections/

Java:
/**
 * 
 */
package de.tutorials;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.google.common.collect.Iterators;

/**
 * @author Thomas.Darimont
 * 
 */
public class ConcatIteratorsExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		int[] keys = new int[4];

		Map<Integer, String> mapA = new HashMap<Integer, String>();
		mapA.put(1, "1");
		mapA.put(2, "2");
		Map<Integer, String> mapB = new HashMap<Integer, String>();
		mapB.put(3, "3");
		mapB.put(4, "4");

		int currentIndex = 0;

		Iterator<Integer> iterator = Iterators.concat(mapA.keySet().iterator(),
				mapB.keySet().iterator());

		while (iterator.hasNext()) {
			keys[currentIndex++] = iterator.next();
		}
		System.out.println(Arrays.toString(keys));
	}
}

Gruß Tom
 
Moin Tom,

danke schonmal. Du sag mal was ist denn Iterators für ein Package? Ich nutze Java 5 und das scheint es da nicht zu geben.
 
Du könntest auch ohne "com.google.common.collect.Iterators" auskommen:

Code:
List<Integer> list = new ArrayList<Integer>(map1.keySet());
list.addAll(map2.keySet());

entweder Integer[]:
Code:
Integer[] i = list.toArray(new Integer[0]);

oder int[]:
Code:
int[] i = new int[list.size()];
for (int j = 0; j < i.length; j++) { // geht auch mit Zähler und Iterator
  i[j] = list.get(j);
}
 
Zurück