-1

所以我有:

private static ArrayList<AbstractAnalyser> analysers = new ArrayList<>();

public static String getAnalyser(String analyser){
    if(analysers.contains(analyser)){
      return "The full name of the analyser";
    }
    return null;
}

所以我想要的是..

如果arraylist 包含参数分析器,我希望它返回arraylist 中的对象的全名。

假设这些值在数组列表中:

分析仪,方法和第二。<- 随机名称

如果参数是分析器并且数组列表包含分析器。该方法需要返回该名称。

即使参数是“分析”。

4

1 回答 1

2

我会使用地图而不是列表:

private static Map<String, AbstractAnalyser> analysers = new HashMap<>();

public static AbstractAnalyser getAnalyser(String analyserName){
    AbstractAnalyser result = null;
    if ((analyserName != null) && (analyserName.trim().length() > 0)) {
        if (analysers.containsKey(analyserName)) {
            result = analysers.get(analyserName);
        } else {
            for (String key : analysers.keySet()) {
                // put the logic to find the one you want here.       
            }
        }
    }
    return result;
}

但是,如果你必须这样做,如果 AbstractAnalyser 有办法给你它的名字,你可以这样做:

private static List<AbstractAnalyser> analysers = new ArrayList<>();

public static AbstractAnalyser getAnalyser(String analyserName){
    AbstractAnalyser result = null;
    if ((analyserName != null) && (analyserName.trim().length() > 0)) {
        for (AbstractAnalyser analyser : analysers) {
            // Here's how you look by name
            if (analyser.getName().equals(analyserName)) {  
                result = analyser;
                break;    
            } else {
               // put special logic to find the one you want here. 
            }
        }
    }
    return result;
}

当您给出确切的名称时,使用 Map 总是更有效,因为查找是O(1). 列表查找始终是O(N).

于 2013-05-18T11:44:08.447 回答