public static <K,V> ImmutableList<ImmutableMap<K, V>> flatten(ImmutableMultimap<K, V> src) {
ImmutableList.Builder<ImmutableMap<K, V>> listBuilder=ImmutableList.builder();
if (!src.isEmpty()) {
ImmutableMap<K, Collection<V>> map = src.asMap();
int entries=map.values().stream().reduce(1, (s,l) -> s*l.size(), (a,b) -> a*b);
ImmutableList<Line<K,V>> lines = map.entrySet().stream()
.map(e -> new Line<>(e.getKey(), e.getValue()))
.collect(ImmutableList.toImmutableList());
for (int i=0;i<entries;i++) {
ImmutableMap.Builder<K, V> mapBuilder = ImmutableMap.builder();
int fact=1;
for (Line<K,V> line: lines) {
mapBuilder.put(line.key, line.get((i/fact) % line.values.length));
fact=fact*line.values.length;
}
listBuilder.add(mapBuilder.build());
}
}
return listBuilder.build();
}
Multimaps.java 文件源码
java
阅读 32
收藏 0
点赞 0
评论 0
项目:de.flapdoodle.solid
作者:
评论列表
文章目录