迭代两个arraylists并将键值放在更优雅的地图上

时间:2016-05-13 08:01:08

标签: java dictionary arraylist java-8

在我的启动器方法中,我确保两个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中执行此操作的更优雅和有效的方法是什么?

3 个答案:

答案 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);