2013-05-18 55 views
-1

绳子,让我有:什么方法返回的ArrayList中

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包含分析器。该方法需要返回该名称。

即使参数为 “ANALY”。

+1

我们需要看到,以帮助你在这里'AbstractAnalyser'类... – jlordo

+1

如何参数是在同一时间“分析”和“ANALY”?这个问题没有道理。听起来你可能想要一个正则表达式来匹配名称。 – duffymo

+0

是否'AbstractAnalyser'有像'的getName()'方法? –

回答

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; 
} 

使用地图始终是更有效的,如果你给出确切的名称,因为查找是O(1)。列表查找始终为O(N)

+0

你应该有你'for'在'else'块。 –

+0

只是注意到它。固定。当你的评价很高时,我保存了它。谢谢你,拉维。 – duffymo

+0

我在一个ArrayList所做的一切,这会是可能的ArrayList中? (而不是(井)图) – user2192658