Java 唯一多态对象列表

Java 唯一多态对象列表,java,list,unique,Java,List,Unique,我试图验证列表是否只包含唯一类型的多态对象。什么是验证这一点的干净方法 下面是一个简单的例子来说明我要做的事情: 给定一个独一无二的动物列表 我认为 uniqueAnimals = Arrays.asList(new Dog("Snoopy"), new Cat("Garfield")) 有效且 uniqueAnimals = Arrays.asList(new Dog("Snoopy"), new Dog("Pluto&

我试图验证列表是否只包含唯一类型的多态对象。什么是验证这一点的干净方法

下面是一个简单的例子来说明我要做的事情:

给定一个独一无二的动物列表

我认为

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

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

要想无效,可以使用
getClass()
函数,它返回此对象的运行时类。您可以将此类存储在一个集合中,并使用
add
方法

如果元素不在集合中,则
add
方法将元素添加到集合中,否则返回false

  public static boolean areAllUnique(List<Animal> list) {
    Set<Class> set = new HashSet<>();

    for (Animal animal : list) {
      if (!set.add(animal.getClass()))
        return false;
    }
    return true;
  }
公共静态布尔区域唯一(列表){
Set=newhashset();
用于(动物:列表){
如果(!set.add(animal.getClass()))
返回false;
}
返回true;
}

您可以使用
getClass()
函数,它返回此对象的运行时类。您可以将此类存储在一个集合中,并使用
add
方法

如果元素不在集合中,则
add
方法将元素添加到集合中,否则返回false

  public static boolean areAllUnique(List<Animal> list) {
    Set<Class> set = new HashSet<>();

    for (Animal animal : list) {
      if (!set.add(animal.getClass()))
        return false;
    }
    return true;
  }
公共静态布尔区域唯一(列表){
Set=newhashset();
用于(动物:列表){
如果(!set.add(animal.getClass()))
返回false;
}
返回true;
}

如果您使用的是Java-8,您可以使用:

private boolean isValid(List<Animal> animals) {
    return animals.stream()
            .collect(Collectors.toMap(c -> c.getClass().getSimpleName(),
                    x -> false, (a, b) -> true, HashMap::new))
            .containsValue(true);
}

然后,您可以检查HashMap是否包含值true。

如果您使用的是Java-8,则可以使用:

private boolean isValid(List<Animal> animals) {
    return animals.stream()
            .collect(Collectors.toMap(c -> c.getClass().getSimpleName(),
                    x -> false, (a, b) -> true, HashMap::new))
            .containsValue(true);
}

然后,您可以检查HashMap是否包含值true。

您可以检查列表中对象的类是否唯一。试试这个

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

您可以检查列表中对象的类是否唯一。试试这个

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

为什么第二个列表无效,因为它包含两条狗?是的,要求列表中有唯一的类型为什么第二个列表无效,因为它包含两条狗?是的,要求列表中有唯一的类型