这就是我最后想要的:
Multimap<String, String> meshMap =
ImmutableMultimap.<String, String>builder()
.putAll("1", "2", "3")
.putAll("2", "1", "3")
.putAll("3", "1", "2")
.putAll("a", "b")
.putAll("b", "a")
.build();
有没有办法使用 2 个列表更优雅地使用 stream() 或另一个 Guava 助手?
Set<String> group1 = ImmutableSet.of("1", "2", "3");
Set<String> group2 = ImmutableSet.of("a", "b");
Multimap<String, String> meshMap = // ???
我正在使用 Java 8,但如果更好的方法仅在较新版本的 Java 中可用,我也很乐意学习。
回答1
发布我的问题的答案以澄清我的问题,并建议至少一种方法。
List<Set<String>> groups = List.of(
ImmutableSet.of("1", "2", "3"),
ImmutableSet.of("a", "b")
);
var meshMapBuilder = ImmutableMultimap.<String, String>builder();
groups.forEach(group -> {
group.forEach(item -> {
var groupExceptItem = group.stream()
.filter(x -> !x.equals(item))
.collect(Collectors.toSet());
meshMapBuilder.putAll(item, groupExceptItem);
});
});
var meshMap = meshMapBuilder.build();