2015-09-25 2 views
2

Cette partie du code renvoie l'erreur Cette méthode accède à la valeur d'une entrée de la carte, en utilisant une clé qui a été extraite d'un itérateur keySet. Il est plus efficace d'utiliser un itérateur sur le entrySet de la carte, pour éviter la recherche Map.get (key). me guider Veuillez comment reformulerPerformance - Utilisation inefficace de l'itérateur keySet à la place de l'itérateur entrySet

if (docPropertiesMap != null) { 
     Iterator<String> properties = docPropertiesMap.keySet().iterator(); 
     IDocProperty[] docProperties = new IDocProperty[docPropertiesMap 
       .size()]; 
     int iArrIndex = 0; 

     while (properties.hasNext()) { 
      String strPropName = properties.next(); 
      String[] propValue = docPropertiesMap.get(strPropName); 

      IDocProperty docProperty = (IDocProperty) FDMAFactory 
        .getDataObject("DocProperty"); 
      docProperty.setPropertyName(strPropName); 
      docProperty.setArrPropertyValues(propValue); 
      docProperties[iArrIndex++] = docProperty; 
     } 
     metadata.setArrDocProperties(docProperties); 
     return metadata; 
    } 
+2

S'il vous plaît jeter un oeil à la même question: http://stackoverflow.com/questions/3870064/performance-considerations-for-keyset -et-entryset-of-map? rq = 1 – vijay

Répondre

1

C'est un avertissement sonarqube provenant de FindBugs.

Vous pouvez réécrire votre code comme ceci:

if (docPropertiesMap != null) { 
    IDocProperty[] docProperties = new IDocProperty[docPropertiesMap.size()]; 
    int iArrIndex = 0; 

    for (Map.Entry<String, String[]> entry : docPropertiesMap.entrySet()) { 
     String strPropName = entry.getKey(); 
     String[] propValue = entry.getValue(); 

     IDocProperty docProperty = (IDocProperty) FDMAFactory.getDataObject("DocProperty"); 
     docProperty.setPropertyName(strPropName); 
     docProperty.setArrPropertyValues(propValue); 
     docProperties[iArrIndex++] = docProperty; 
    } 
    metadata.setArrDocProperties(docProperties); 
    return metadata; 
} 
+0

Merci beaucoup – Arun