假设我们有以下方法:
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 语句是什么。我无法概括这一点,希望得到帮助:)
最佳答案
最简单的方法是定义一个像 IdAware
这样的接口(interface):
public interface IdAware { public String getId(); }
然后让所有的动物类实现这个接口(interface)。这需要将 getTigerId()
等方法重命名为 getId()
,但这只是一个小小的牺牲。
然后您可以使用此方法在动物列表中进行搜索。像这样的东西:
private <T extends IdAware> boolean ifExists(String id, Collection<T> animals) {
return animals.stream().anyMatch(animal -> id.equals(animal.getId()));
}
或者,如果您出于某种原因不想(或不能)拥有通用接口(interface),您还可以传递一个提取 id 的 lambda。
private <T> boolean ifExists(String id, Collection<T> animals, Function<T, String> getId) {
return animals.stream().map(getId).anyMatch(animalId -> id.equals(animalId));
}
然后像 ifExists("Scott", Tigers, Tiger::getTigerId); 那样调用它。
。
关于java - 概括java中的4种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49609597/