如何合并两个的ArrayList>一个?

问题描述 投票:-2回答:4

ArrayList<Map<String, String>> result1

result1

(1, a)
(2, a)
(3, b)
(4, e)
(5, e)

ArrayList<Map<String, String>> result2

result2

(1,android)
(2,ios)
(3,android)
(4,android)
(5,ios)

我想合并两个地图,在地图像这样的

(1, ( a, android))
(2, ( a, ios))
(3, ( b, android))
(4, (e, android))
(5, (e, ios))

如何做到这一点?

java hashmap multimap
4个回答
0
投票

您可以合并Stream.concat(),并将它们与Collectors.groupingBy()Collectors.mapping()组两个流:

Map<String, String> first = Map.of("1", "a", "2", "a");
Map<String, String> second = Map.of("1", "android", "2", "ios");
Map<String, List<String>> result = Stream.concat(first.entrySet().stream(), second.entrySet().stream())
            .collect(groupingBy(Entry::getKey, mapping(Entry::getValue, toList())));
System.out.println(result);

将输出:

{1=[a, android], 2=[a, ios]}

0
投票

因为你已经在这里指定的要求,你能做到这样。

我遍历第一张地图的钥匙。和收集值从所有的地图每个键并把它们在列表中。然后把列表生成的地图。

import java.util.*;

public class MergeMaps
{
  public static void main(String[] args)
  {
    Map<String, String> map1 = new HashMap<>();
    map1.put("1", "a");
    map1.put("2", "a");
    map1.put("3", "b");
    map1.put("4", "e");
    map1.put("5", "e");

    Map<String, String> map2 = new HashMap<>();
    map2.put("1", "android");
    map2.put("2", "ios");
    map2.put("3", "android");
    map2.put("4", "android");
    map2.put("5", "ios");

    Set<String> keys = new HashSet<>();
    keys.addAll(map1.keySet());
    keys.addAll(map2.keySet());

    Map<String, List<String>> mergedMap = new HashMap<>();
    for (String key : keys)
    {
      List<String> list = new ArrayList<>();
      list.add(map1.get(key));
      list.add(map2.get(key));
      mergedMap.put(key, list);
    }

    System.out.println(mergedMap);
  }
}

输出将是:

{1=[a, android], 2=[a, ios], 3=[b, android], 4=[e, android], 5=[e, ios]}


0
投票

你可以试试这个方法,以及:

Map<String, String> result1 = new HashMap<>();
// initialize result1 ...

Map<String, String> result2 = new HashMap<>();
// initialize result2 ...

Map<String, Map<String, String>> mergedResult = new HashMap<>();

截至到Java 8

result1.forEach((k1, v1) ->
            mergedResult.put(k1, new HashMap<String, String>() {{
                put(v1, result2.get(k1));
            }}));

Java的9或更高版本

result1.forEach((k1, v1) -> mergedResult.put(k1, 
                                 Map.of(v1, result2.get(k1))));

0
投票

这是到达目标的一种方式:

输入数据:

// The first list of data
List<Map<String, String>> list1 = new ArrayList<>();
list1.add(getMapData("1", "a"));
list1.add(getMapData("2", "a"));
list1.add(getMapData("3", "b"));
list1.add(getMapData("4", "e"));
list1.add(getMapData("5", "e"));
list1.add(getMapData("999", "x"));
System.out.println(list1);

数据1:[{1=a}, {2=a}, {3=b}, {4=e}, {5=e}, {999=x}]

// The second list of data
List<Map<String, String>> list2 = new ArrayList<>();
list2.add(getMapData("1", "android"));
list2.add(getMapData("2", "ios"));
list2.add(getMapData("3", "android"));
list2.add(getMapData("4", "android"));
list2.add(getMapData("5", "ios"));
list2.add(getMapData("888", "zzzzz"));
System.out.println(list2);

数据2:[{1=android}, {2=ios}, {3=android}, {4=android}, {5=ios}, {888=zzzzz}]

// utility method for creating test data
private static Map<String, String> getMapData(String k, String v) {
    Map<String, String> m = new HashMap<>();
    m.put(k, v);
    return m;
}


The Result Process:

输出被存储到Map<String, List<String>>

Map<String, List<String>> result = new HashMap<>();

// process the first list
for (Map<String, String> m : list1) {
    for (Map.Entry<String, String> entry : m.entrySet()) {
        List<String> valueList = new ArrayList<>();
        valueList.add(entry.getValue());
        result.put(entry.getKey(), valueList);
    }
}

// process the second list; merge with the first
for (Map<String, String> m : list2) {
    for (Map.Entry<String, String> entry : m.entrySet()) {
        String k = entry.getKey();
        List<String> valueList = result.get(k);
        if (valueList == null) {
            valueList = new ArrayList<>();
        }
        valueList.add(entry.getValue());
        result.put(k, valueList);
    }
}

System.out.println(result);

结果:

{1=[a, android], 2=[a, ios], 3=[b, android], 4=[e, android], 5=[e, ios], 888=[zzzzz], 999=[x]}
© www.soinside.com 2019 - 2024. All rights reserved.