在我的启动器方法中,我确保两个ArrayLists具有相同的大小,否则我抛出异常。我用来迭代两个ArrayLists并将键值对放在地图中的解决方案工作正常,但我也发现它不是很优雅或最新。
在这个方法中,我正在填写一个稍后将与Apache freemarker库一起使用的地图。
Map<String, Object> map = new HashMap<String, Object>();
String placeHolder;
String value;
for (int i = 0; i < placeHolderList.size(); i++) {
placeHolder = placeHolderList.get(i);
value = valueList.get(i);
map.put(placeHolder, value);
}
在Java 8中执行此操作的更优雅和有效的方法是什么?
答案 0 :(得分:3)
这样的事情可以解决问题:
typedef int* J;
typedef int H[4];
J j = new H; // This will work
<强>输出:强>
List<String> placeHolderList = Arrays.asList("key1", "key2");
List<Object> valueList = Arrays.asList("value1", "value2");
Map<String, Object> result = IntStream.range(0, placeHolderList.size())
.boxed()
.collect(toMap(placeHolderList::get, valueList::get));
System.out.println(result);
答案 1 :(得分:1)
如@NicolasFilotto answer中所述,您需要迭代索引,但不需要自己封装索引。
Map<String, Object> result = IntStream.range(0, placeHolderList.size())
.collect(HashMap::new,
(map, i) -> map.put(placeHolderList.get(i), valueList.get(i)),
Map::putAll);
答案 2 :(得分:0)
如果你不使用java 8.那就试试这个:
List<String> keyList = Arrays.asList("1", "2");
List<String> valList = Arrays.asList("one", "two");
Map<String, String> map = new HashMap<String, String>();
for (int i = 0; i < keyList.size(); i++) {
map.put(keyList.get(i), valList.get(i));
}
System.out.println(map);