将Map <long,myobject =“”>转换为Map <long,list <myobject =“”>&gt;

时间:2016-03-24 11:07:27

标签: java java-8 java-stream

使用java8和流API。

只有一个MyObject,我想转换

Map<Long, MyObject> 

Map<Long, List<MyObject>>

列表中有一个元素?

3 个答案:

答案 0 :(得分:4)

Map<Long, List<MyObject>> newMap = oldMap.entrySet().stream()
                 .collect(Collectors.toMap(
                            Entry::getKey, 
                            e -> new ArrayList<>(Arrays.asList(e.getValue()))));

如果值中的不可变列表没问题,最后一行可能会简化一点:

                            e -> Collections.nCopies(1, e.getValue())));

答案 1 :(得分:1)

Map<Long, MyObject> yourMap = whateverYouImplementedHere;
Map<Long, List<MyObject>> listMap = new HashMap<>();

for (Entry<Long, MyObject> entry : yourMap.entrySet()){

    listMap.put(entry.getKey(), new ArrayList<MyObject>(Arrays.asList(entry.getValue()));
}

答案 2 :(得分:1)

您可以获取条目集流并使用toMap收集器与Collections.singletonList(创建不可变列表)结合使用,从原始地图创建新值。

Map<Long, List<MyObject>> transformedMap = 
    map.entrySet()
       .stream()
       .collect(toMap(Map.Entry::getKey, 
                      e -> Collections.singletonList(e.getValue())));