假设我们有以下方法:
private boolean elephantExists(String name){
for (Elephant e : elephantList) {
if (e.getElephantName().equals(name)) {
return true;
}
}
return false;
}
private boolean elephantIDExists(String elephantID){
for (Elephant e : elephantList) {
if (e.getElephantID().equals(elephantID)) {
return true;
}
}
return false;
}
private boolean tigerIDExists(String tigerID){
for (Tiger t : tigerList) {
if (t.getTigerID().equals(tigerID)) {
return true;
}
}
return false;
}
private boolean dogIDExists(String dogID){
for (Dog d : dogList) {
if (d.getDogID().equals(dogID)) {
return true;
}
}
return false;
}
我们如何将所有这些方法概括为一种方法?
我想过做这样的事情:
private boolean ifExists(String s, ArrayList<Object> arrList) {
for (Object o : arrList) {
if (something) {
return true;
}
}
return false;
}
但是我不确定if语句是什么。我很难概括这一点,并希望得到帮助:)
答案 0 :(得分:3)
最直接的方法是定义像b
这样的界面:
IdAware
然后让所有动物类实现此接口。这需要将public interface IdAware { public String getId(); }
重命名为getTigerId()
,但这只是一个小小的牺牲。
然后您可以使用此方法搜索动物列表。类似的东西:
getId()
或者如果由于某种原因你不想(或不能)拥有一个公共接口,你可以另外传递一个提取id的lambda。
private <T extends IdAware> boolean ifExists(String id, Collection<T> animals) {
return animals.stream().anyMatch(animal -> id.equals(animal.getId()));
}
然后将其称为private <T> boolean ifExists(String id, Collection<T> animals, Function<T, String> getId) {
return animals.stream().map(getId).anyMatch(animalId -> id.equals(animalId));
}
。
答案 1 :(得分:0)
我会像这样创建一个Animal基类:
abstract class Animal {
abstract String getId();
abstract String getName();
}
然后让所有其他人扩展它:
class Elephant extends Animal {
@Override
String getId() {
// do logic
}
@Override
String getName() {
// do logic
}
}
class Tiger extends Animal{
@Override
String getId() {
// do logic
}
@Override
String getName() {
// do logic
}
}
class Dog extends Animal {
@Override
String getId() {
// do logic
}
@Override
String getName() {
// do logic
}
}
现在您可以将Animal
类型的任何对象添加到ArrayList<Animal>
中,并将其与条件一起传递给ifExists
方法。
private static boolean ifExists(Predicate<Animal> predicate, List<Animal> arrList) {
for (Animal animal : arrList) {
if (predicate.test(animal)) {
return true;
}
}
return false;
}
现在你可以这样做:
ifExists(tiger -> tiger.getId().equals("007464"), arrList);
ifExists(elephant -> elephant.getId().equals("00D37464"), arrList);
ifExists(elephant -> elephant.getName().equals("Bo-Tat"), arrList);
ifExists(dog -> dog.getId().equals("008483"), arrList);
....
....
....
答案 2 :(得分:0)
如果您不熟悉Java 8,并且您正在寻找一个简单的答案。这是代码:
class AnimalId{
private String id;
public String getId(){ return this.id; }
}
class Elephant extends AnimalId{
//Other variables and function
}
class Tiger extends AnimalId{
//Other variables and function
}
class Dog extends AnimalId{
//Other variables and function
}
这涵盖了您需要的概括。现在来看你的实际代码,它将是这样的:
private boolean ifExists(String s, ArrayList<AnimalId> arrList) {
for (AnimalId o : arrList) {
if (o.getId.equals(s)) {
return true;
}
}
return false;
}