我有一个Map<String, Set<String>>
我需要扭转。这是一个数据示例:
("AA", ("AA01", "AA02", "AA03")
("BB", ("AA01", "BB01", "BB02")
我想要获得的是Map<String, Set<String>>
的反向关系,像这样:
("AA01", ("AA", "BB"))
("AA02",("AA"))
("AA03",("AA"))
("BB01",("BB"))
("BB02",("BB"))
我能够做到这一点,但是使用 foreach:
private Map<String, Set<String>> getInverseRelationship(Map<String, Set<String>> mappings) {
Map<String, Set<String>> result = new HashMap<>();
mappings.entrySet().stream().forEach(record -> {
String key = record.getKey();
Set<String> itemSet = record.getValue();
itemSet.forEach(item -> {
Set<String> values = (result.containsKey(item))? result.remove(item) : new HashSet<>();
values.add(key);
result.put(item, values);
});
});
return result;
}
有没有更好的方法使用 Java 8 流 API 来做到这一点?