java - 概括java中的4种方法

标签 java generics methods

假设我们有以下方法:

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/

相关文章:

java - 使用 NODEJS 和不使用 TOMCAT 的 Pentaho 报告

java - 使用断言True

java - 我如何比较Java中的2个方法?

c# - 为什么人们不将依赖属性包装在通用类中?

c# - 如何对泛型类进行分组?

java - 从数组中删除第一个元素

java - 绘图方法流程

java - 日期语句之间的 JPQL SELECT

java - 为什么 Eclipse 构建路径中需要 oracle 驱动程序?

ios - swift 如何比较泛型