首页 > 解决方案 > 唯一多态对象列表

问题描述

我正在尝试验证列表仅包含唯一类型的多态对象。什么是验证这一点的干净方法?

这是一个简单的示例来说明我正在尝试做的事情:

给定一个List<Animal> uniqueAnimals

我认为

uniqueAnimals = Arrays.asList(new Dog("Snoopy"), new Cat("Garfield")) 

有效并且

uniqueAnimals = Arrays.asList(new Dog("Snoopy"), new Dog("Pluto"), new Cat("Garfield"))

无效

标签: javalistunique

解决方案


You can check if the classes of the objects in the list are unique. Try this.

static boolean isUniquePolymorphicObjects(List<Animal> list) {
    return list.stream()
        .map(object -> object.getClass())
        .distinct().count() == list.size();
}

and

List<Animal> uniqueAnimalsValid = Arrays.asList(new Dog("Snoopy"), new Cat("Garfield"));
System.out.println(isUniquePolymorphicObjects(uniqueAnimalsValid));

List<Animal> uniqueAnimalsInvalid = Arrays.asList(new Dog("Snoopy"), new Dog("Pluto"), new Cat("Garfield"));
System.out.println(isUniquePolymorphicObjects(uniqueAnimalsInvalid));

otuput:

true
false

推荐阅读