我不确定我是否正确理解了您的代码,因为 getUsers 看起来不会返回 Map
但是,我可以帮助您合并两个地图,如下所示:
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
public class ExampleTest {
@Test
public void test() {
// Create maps to combine
Map<String, String> mapA = new LinkedHashMap<>();
Map<String, String> mapB = new LinkedHashMap<>();
// Create final map
Map<String, List<String>> mapC = new LinkedHashMap<>();
// Add data to input mapA
mapA.put("A", "value1");
mapA.put("B", "value2");
// Add data to input mapB
mapB.put("C", "Happy");
mapB.put("B", "Sad");
// Fill results from mapA
mapC = populateMapCWithMapContent(mapC, mapA);
mapC = populateMapCWithMapContent(mapC, mapB);
// Check Results
assertEquals(2, mapA.size());
assertEquals(2, mapB.size());
assertEquals(3, mapC.size());
// show results
for (String key : mapC.keySet()) {
System.out.println("Key=" + key);
List<String> values = mapC.get(key);
for (String value : values) {
System.out.println(" Value = " + value);
}
}
}
/**
* Populate mapC with provided map Contents
*
* @param mapC
* - resulting map
* @param map
* - input data
* @return mapC
*
* Note: this would work with a void, but I always feel that if mapC is
* changed, then mapC should be returned (To help readability).
*/
private Map<String, List<String>> populateMapCWithMapContent(Map<String, List<String>> mapC,
Map<String, String> inputMap) {
List<String> mapCValues;
for (String key : inputMap.keySet()) {
if (mapC.containsKey(key)) {
mapCValues = mapC.get(key);
} else {
mapCValues = new ArrayList<String>();
}
mapCValues.add(inputMap.get(key));
mapC.put(key, mapCValues);
}
return mapC;
}
}
提供以下结果:
Key=A
Value = value1
Key=B
Value = value2
Value = Sad
Key=C
Value = Happy
请注意,mapA 和 mapB 仅包含 String 值,但由于组合映射 (mapC) 需要为单个键保存多个值,因此我使用了 List。
也可以包含另一个地图而不是字符串。例如
Map<String, LinkedHashMap<String,Object>> mapC = new LinkedHashMap<>();