java - 如何从列表中创建网格图

这就是我最后想要的:

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();