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();
}
为什么第二个列表无效,因为它包含两条狗?是的,要求列表中有唯一的类型为什么第二个列表无效,因为它包含两条狗?是的,要求列表中有唯一的类型