我有两个地图:
我想到的一个思路是首先将两个地图合并成一个
数据说明:对于与一个
为了比较,以下是解决同一问题的纯命令式方法的示例:
Map<A, Collection<B>> mapAB
Map<B, Collection<C>> mapBC
Map<A, Collection<C>> mapAC
,并且我想知道是否有一种使用lambda和转换来平滑地解决这个问题的方法。在我的特定情况下,所有集合都是集合,但我希望解决一般集合的问题。我想到的一个思路是首先将两个地图合并成一个
Map<A, Map<B, Collection<C>>>
,然后展开它,但我对任何方法都持开放态度。数据说明:对于与一个
A
相关联的值集合,应仅出现一个B
,对于mapBC
也是如此(一个给定的C
只映射到一个B
)。因此,从给定的A
到给定的C
应该只有一条路径,虽然可能存在没有相应的A -> B
映射的A -> B
映射,以及存在没有相应的B -> C
映射的B -> C
映射。这些孤立点在结果中不会出现。为了比较,以下是解决同一问题的纯命令式方法的示例:
Map<A, Collection<C>> mapAC = new HashMap<>();
for (Entry<A, Collection<B>> entry : mapAB.entrySet()) {
Collection<C> cs = new HashSet<>();
for (B b : entry.getValue()) {
Collection<C> origCs = mapBC.get(b);
if (origCs != null) {
cs.addAll(origCs);
}
}
if (!cs.isEmpty()) {
mapAC.put(entry.getKey(), cs);
}
}
Map<Person, Set<Job>>
和Map<Job, Set<Tool>>
,是否可能不同的人拥有相同的工作,或者少数工作使用相同的工具?因此,像p1 -> {j1, j2},p2-> {j2、j3}
这样的东西是否可能?另外,job1 -> {tool1, tool2} job2 -> {tool2, tool3} job3 -> {tool4}
呢?您期望得到什么结果?您希望Collection<X>
也是一个Set
,还是其中的元素可以存在多次? - Pshemo