Dog
和Cat
类继承自Animal
类,如果我想添加ArrayList
,我会使用代码
pets.add(new Dog(name))
如何查看姓名是否被多次使用?
我正在寻找类似:pets.contain(...)
答案 0 :(得分:1)
实际上有一个contains method on List。它使用equals方法来检查是否相等,因此如果您的Dog
或Cat
类以相同名称表示相等的方式实现equals
,则只需使用contains
如果由于某种原因你不想这样做(因为你需要相等来表示别的东西),你可以迭代列表并找到一个具有相同名称的条目。或者,使用流,如下所示:pets.stream().filter(pet -> pet.getName().equals(newName)).findAny().isPresent()
答案 1 :(得分:0)
如果您使用的是Java8,则可以使用以下内容:
pets.stream().map(animal -> animal.getName()).contains(name);
将返回布尔值,无论name是否已在List中。
另一种方法是使用for循环:
boolean isNamePresent = false;
for (Animal pet: pets) {
if(pet.getname().equals(name)) {
isNamePresent = true;
}
}
答案 2 :(得分:0)
使用本机功能无法实现此目的。
您可以尝试以下方法:
int number = 0;
for (int i=0; i<pets.size(); i++){
if pets.get(i).getname().equalsIgnoreCase("nameYouWant") number++;
}
答案 3 :(得分:0)
你的问题很模糊。
如果您想从列表中查找多次使用的名称,您可以执行类似
的操作IDictionary<string,object>
将为您提供包含多次出现的pets.stream()
.collect(Collectors.groupingBy(Animall::getName(), Collectors.counting()))
.entrySet().stream()
.filter(e->e.getValue() > 1)
.map(e->e.getKey())
.collect(Collectors.toList()));
个名称
如果您只是想在添加之前检查List<String>
中是否存在名称,我认为您应该使用pets
而不是Map<String, Animal>
。