这个问题并不难,我已经用我自己的方式解决了,但我想听听你的意见,也许有什么方法可以让这个选项变得更好? java 8-11。
Map<Set<String>, User> --> Map<String, User>
想象一下,集合中的元素不会重复。还要注意:许多唯一的键可以指向相同的值。
我使用以下代码进行了此操作:
Map<String, User> result = new HashMap<>();
existingMap.forEach((set, user) -> set.forEach(item -> result.put(set, user)));
所以,我的问题是——有没有更好的方法?我的意思是,也许流api已经有了一些方法来实现它?在“收集”方法的范围内
2条答案
按热度按时间igsr9ssn1#
如果要使用收集器,可以执行以下操作:
flatMap
首先,然后toMap
:或者如果你只是想使用
collect
仅(这与您最初的方法更相似):hwazgwia2#
这个问题无法解决。
考虑以下事项:
("Bill", "Tom", "Alice") -> User1
("Bill", "Tom", "Jane") -> User2
这对结构1有效(Map<Set<String>, User>
)但对结构2无效(Map<String, User>
)因为这将导致数据丢失(有关bill和tom的信息将丢失)。您可以考虑的另一种结构是从
Map<Set<String>, User>
到Map<String, Set<User>>
,这不会导致数据降级。编辑:根据注解,假设数据丢失是可接受的,正常的for循环解决方案是: