【发布时间】:2021-04-05 00:09:34
【问题描述】:
给定一张这样的地图,我们有一年中每周每天的频率计数:
Map.of(
DayOfWeek.MONDAY , 52 ,
DayOfWeek.TUESDAY , 52 ,
DayOfWeek.WEDNESDAY, 53 ,
DayOfWeek.THURSDAY , 53 ,
DayOfWeek.FRIDAY , 52 ,
DayOfWeek.SATURDAY , 52 ,
DayOfWeek.SUNDAY , 52
)
…或作为文本:
{周一=52,周二=52,周三=53,周四=53,周五=52,周六=52,周日=52}
...我如何反转以生成不同数字的multimap,每个数字都导致拥有该数字的DayOfWeek 的集合(列表?集合?)?
结果应该等同于这段代码的结果:
Map.of(
53 , List.of( DayOfWeek.WEDNESDAY , DayOfWeek.THURSDAY ) ,
52 , List.of( DayOfWeek.MONDAY , DayOfWeek.TUESDAY , DayOfWeek.FRIDAY , DayOfWeek.SATURDAY , DayOfWeek.SUNDAY )
)
我想直接使用 Java 生成结果 multimap,而不需要额外的库,例如 Eclipse Collections 或 Google Guava。这些库可能会使这更容易,但我很想知道是否可以使用仅使用内置 Java 的解决方案。否则,我的问题与Guava: construct a Multimap by inverting a Map 完全相同。鉴于现代 Java 中的新流和多地图功能,我希望现在可以做到这一点,而当时还没有。
我看到了与此类似的各种现有问题。但没有一个适合我的情况,这似乎是一种相当普遍的情况。例如,this Question 忽略了原始值是冗余/多重的问题,因此需要一个多重映射。其他如this 或this 涉及Google Guava。
【问题讨论】:
标签: java dictionary collections multimap multi-mapping