2016-04-08 13 views
0

Ich habe eine Anwendung, die eine method enthält, die Schleife durch eine Hash Map verwendet wird unter Verwendung eines For-Loop:Für Schleifen-Iterationen, die von der Eigenschaftendatei gesteuert werden?

public void iterateHashMap(Map<Dog, List<String>> mapOfDogsAndDescriptions){ 

     for (Map.Entry<Dog, List<String>> entry : mapOfDogIdsAndStrings.entrySet()) { 
      String key = entry.getKey().getId(); 
      List<String> StringList = entry.getValue(); 

      //do something 
      } 

    } 

Ich möchte definieren können, wie oft die Schleife auf eine Eigenschaft abhängig iteriert in meine properties Datei.

z. Wenn die Eigenschaft auf 3 festgelegt ist, durchläuft sie nur die ersten drei Schlüssel in Hash Map.

Dies ist das erste Mal mit einer properties file in einer Java-Anwendung, Wie würde ich das tun?

+0

Haben Sie schon geschafft, diesen Wert (die '' 3'') aus der Eigenschaftendatei zu lesen? – f1sh

+0

Nein, ich habe nicht, ich beginne gerade mit der Lösung dieses – java123999

+0

"Das erste N" ist eine Anforderung, die ein kleines Problem hat. Für eine HashMap sind die Schlüssel ungeordnet, so dass das erste N nicht bestimmt ist. Für eine TreeMap ist es die erste N aller sortierten Schlüssel. Bei einer LinkedHashMap ist es das erste N, um sie zur Karte hinzuzufügen. –

Antwort

2

ich so etwas tun würde:

public void iterateHashMap(Map<Dog, List<String>> mapOfDogsAndDescriptions){ 
    int count = Integer.parseInt(System.getProperty("count")); 
    for (Map.Entry<Dog, List<String>> entry : mapOfDogIdsAndStrings.entrySet()) { 
     if (count-- <= 0) 
      break; 
     String key = entry.getKey().getId(); 
     List<String> StringList = entry.getValue(); 

     //do something 
    } 

} 
+0

Sie haben möglicherweise vergessen, "count" zu verringern. – SantiBailors

+0

Ja, ja, tat ich. Vielen Dank. –

+0

Kannst du das bitte erklären, ich kann dem nicht folgen? Danke – java123999

0

Verwenden Sie ein Framework? In Spring Framework können Sie es als:

@Resource(name = "properties") 
private Properties properties; 

Und in Ihrem application:

<bean id="properties" 
     class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="location" value="classpath:urls.properties"></property> 
</bean> 

schließlich in Ihrer Methode:

int counter = 0; 

Integer limit = Integer.parseInt(properties.getProperty("some property")); 

for(//Some conditions){ 
    //Some code 

    counter++; 
    if(counter > limit) break; 
} 
+0

Ok danke, aber dann wie bekomme ich die Schleife nur die ersten 3 Eingabewerte in der HashMap durchlaufen? – java123999

+0

Verwenden Sie einen Zähler, erhöhen Sie 1 in jeder Iteration, vergleichen Sie mit der Eigenschaft, und verwenden Sie dann Pause, um die Schleife zu verlassen – Wakachopo

+0

Können Sie ein Beispiel dafür geben, danke – java123999

0

In reinem j ava Sie können tun

Properties prop = new Properties(); 
String propFileName = "config.properties"; 

InputStream inputStream = getClass().getClassLoader().getResourceAsStream(propFileName); 

if (inputStream != null) { 
    prop.load(inputStream); 
} else { 
    throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath"); 
} 

int cpt = Integer.valueOf(prop.getProperty("counter")); 
int cptLoop = 0; 
for (Map.Entry<Dog, List<String>> entry : mapOfDogIdsAndStrings.entrySet()) { 
    if (cptLoop == cpt) 
     break; 
    String key = entry.getKey().getId(); 
    List<String> StringList = entry.getValue(); 

    //do something 
    cptLoop++; 
} 
Verwandte Themen