我是Java 8的新手,我有以下要求进行转换:
Map<Shape, int[]> --> Map<Shape, Set<Integer>>
有什么想法吗?
答案 0 :(得分:5)
我已经编辑了这个问题,希望Set<Integer>
是您真正需要的,因为您不能拥有原始的Set
类型Set<int>
。
map.entrySet()
.stream()
.collect(Collectors.toMap(
Entry::getKey,
x -> Arrays.stream(x.getValue()).boxed().collect(Collectors.toSet())
));
另一方面,如果你真的想要独特的原语,那么distinct
和toArray
会起作用,但类型仍然是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())));
}
我使用静态导入Arrays
,Collectors
来缩短代码段。