如何将Map <shape,int [] =“”>转换为Map <shape,set <integer =“”>&gt;在Java 8中?

时间:2017-11-30 15:00:06

标签: java dictionary java-8 set

我是Java 8的新手,我有以下要求进行转换:

Map<Shape, int[]> --> Map<Shape, Set<Integer>>

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

我已经编辑了这个问题,希望Set<Integer>是您真正需要的,因为您不能拥有原始的Set类型Set<int>

 map.entrySet()
            .stream()
            .collect(Collectors.toMap(
                    Entry::getKey,
                    x -> Arrays.stream(x.getValue()).boxed().collect(Collectors.toSet())

    ));

另一方面,如果你真的想要独特的原语,那么distincttoArray会起作用,但类型仍然是Map<Shape, int[]>

 map.entrySet()
            .stream()
            .collect(Collectors.toMap(
                    Entry::getKey,
                    x -> Arrays.stream(x.getValue()).distinct().toArray()

    ));

答案 1 :(得分:3)

以下是将int数组转换为Set<Integer>的方法:

private Set<Integer> convertArrayToSet(int[] array) {
    return stream(array).boxed().collect(toSet());
}

您需要通过此方法跳过地图的每个值:

public Map<Shape, Set<Integer>> convert(Map<Shape, int[]> map) {
    return map.entrySet()
            .stream()
            .collect(toMap(e -> e.getKey(), e -> convertArrayToSet(e.getValue())));
}

我使用静态导入ArraysCollectors来缩短代码段。