EnumMap<Object,Set<x>> - 如何为每个键设置唯一值

EnumMap<Object,Set<x>> - how to have unique values for every key

我正在尝试制作类似的东西。

假设我的 EnumMap 看起来像这样 EnumMap<Animals, Set<Integer>>。 我有这样的键:DogFishCat 来自 Animals class。我想打印 Animals DogFishCat.

的所有值

如您所见,Cat 有 2 个来自 Dog,5 个来自 Fish。所以输出将是:1,2,3,4,5,6,2,5,7

我想在向 EnumMap 添加过程中删除重复项。

所以它应该是这样的:1,2,3,4,5,6,7。添加所有值后我无法稍后过滤。我该怎么做?

这应该有帮助:

public class Test {

    private Map<Animal, Set<Integer>> m = new EnumMap<>(Animal.class);

    public Test() {
        m.put(Animal.DOG, Set.of(1, 2, 3));
        m.put(Animal.FISH, Set.of(4, 5, 6));
    }

    public static void main(String[] args) {
        Test t = new Test();
        t.addValueIfNotPresent(Animal.CAT, 2);
        t.addValueIfNotPresent(Animal.CAT, 5);
        t.addValueIfNotPresent(Animal.CAT, 7);

        System.out.println(t.m);
    }

    private void addValueIfNotPresent(Animal key, Integer value) {
        if (m.values().stream().flatMap(Collection::stream).noneMatch(value::equals)) {
            m.compute(key, (animal, integers) -> {
                if (Objects.isNull(integers)) {
                    Set<Integer> s = new HashSet<>();
                    s.add(value);
                    return s;
                } else {
                    integers.add(value);
                    return integers;
                }
            });
        }
    }

    enum Animal {DOG, CAT, FISH}
}

输出:

{DOG=[3, 2, 1], CAT=[7], FISH=[4, 6, 5]}

这不是很优化和干净,但应该给你一个关于如何继续的想法。