我正在尝试做这样的事情。
比方说我的EnumMap
像这样的EnumMap<Animals, Set<Integer>>
。
我有类似Dog
类的键:Fish
,Cat
,Animals
。我想打印动物Dog
,Fish
和Cat
中的所有值。
如您所见,猫有2条来自狗,5条来自鱼。因此输出为:1,2,3,4,5,6,2,5,7
。
我想在向EnumMap添加过程中删除重复项。
因此应类似于:1,2,3,4,5,6,7
。添加所有值之后,我将无法过滤。我该怎么办?
答案 0 :(得分:1)
这应该有帮助:
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]}
这不是非常优化和干净的方法,但是应该让您知道如何进行操作。