2015-06-08 4 views
1

Я хочу, чтобы получить конкретный элемент в списке. Однако этот список содержится в другом списке. Причина в том, что я читал в файле свойств, с ключами, имеющими более одного значения, назначенного ему, разделенным запятыми. Я создаю список для каждого ключа и его значений и добавляю его в другой список, который содержит несколько списков для каждого ключа и его значений.Как получить определенный элемент в списке списков?

# Menu properties file 

menuEntryPoint=0 
indent=\t\t\t 
lines=--------------------------------------------------------- 

mainMenu=M a i n M e n u 
0.0=First Sub Menu, openMenu(1) 
0.1=Second Sub Menu, openMenu(2) 
0.2=Third Sub Menu, openMenu(3) 

1=First Sub Menu 
1.0=Execute this command, executeCommand(...) 
1.1=Execute another command, executeCommand(...) 
1.2=Execute other command, openMenu(A) 

2=First Sub Menu 
2.0=Execute this command, executeCommand(...) 
2.1=Execute another command, executeCommand(...) 
2.2=Execute other command, openMenu(A) 

3=First Sub Menu 
3.0=Execute this command, executeCommand(...) 
3.1=Execute another command, executeCommand(...) 
3.2=Execute other command, openMenu(A) 

Ниже код я написал для печати на экран:

List<List<String>> menuProperties = new ArrayList<List<String>>(); 

public void configMenuDisplayProperties() throws IOException { 

    Date date = new Date(); 
    Properties menuProp = new Properties(); 
    FileInputStream in = new FileInputStream("C:\\Test\\menu.properties"); 
    menuProp.load(in); 

    //Create list of lists for properties 
    menuProperties.add(getPropertyList(menuProp, "0")); 
    menuProperties.add(getPropertyList(menuProp, "1")); 
    menuProperties.add(getPropertyList(menuProp, "2")); 
    menuProperties.add(getPropertyList(menuProp, "3")); 

    System.out.println(date.toString() + "\t\t" + menuProp.getProperty("developmentArea") + "\n\n"); 
    System.out.println(menuProp.getProperty("indent") + menuProp.getProperty("mainMenu") + "\n"); 

     for (Enumeration<?> e = menuProp.propertyNames(); e.hasMoreElements();) { 
      String name = (String)e.nextElement(); 
      String value = menuProp.getProperty(name); 
      if (name.startsWith(menuProp.getProperty("menuEntryPoint"))) { 
       System.out.println(menuProp.getProperty("indent") + name + "\t" + menuProp.getProperty(name)); 
      } 
     } 
    } 

Выход:

Mon Jun 08 13:39:43 EDT 2015   


     M a i n M e n u 

     0.2 Third Sub Menu, openMenu(C) 
     0.1 Second Sub Menu, openMenu(2) 
     0.0 First Sub Menu, openMenu(1) 

Как именно я могу напечатать определенное значение ключа, который находится в список списков? Я пытаюсь заставить свой вывод выглядеть так, но у меня возникают проблемы с этим.

Mon Jun 08 13:39:43 EDT 2015   


     M a i n M e n u 

     0.0 First Sub Menu 
     0.1 Second Sub Menu 
     0.2 Third Sub Menu 

Я попытался сделать следующее

System.out.println(menuProp.getProperty("indent") + name + "\t" + menuProp.getProperty(name)); 

Но я получаю первый выход вы видите ... Любая помощь будет принята с благодарностью.

+0

вы используете Java 7 или выше? –

+0

@OSryx Это должно быть совместимо с JRE 1.5.0 и не выше ..... :( – Sam5487

ответ

0

Проверьте ниже быстрое решение на основе кода, нет такое решение на основе API, которое может удовлетворить ваши требования.

Если вы хотите, чтобы получить все значения 1-запятой затем использовать HashMap<String, String> indexedHashMap = getValueBashedOnIndex(hashMap, 1);, а если 3-значение запятой используйте HashMap<String, String> indexedHashMap = getValueBashedOnIndex(hashMap, 3);
основном второй параметр getValueBashedOnIndex для которых значения индекса вы хотите.

@SuppressWarnings("rawtypes") 
private static void readPropertiesFile() { 
    ResourceBundle rb = ResourceBundle.getBundle("com.cgi.tmi.utils.test"); 
    Enumeration<String> keys = rb.getKeys(); 
    HashMap<String, String[]> hashMap = new HashMap<String, String[]>(); 
    while (keys.hasMoreElements()) { 
     String key = keys.nextElement(); 
     String value = rb.getString(key); 
     //System.out.println(key + ": " + value); 
     hashMap.put(key, value.split(",")); 
    } 
    HashMap<String, String> indexedHashMap = getValueBashedOnIndex(hashMap, 3); 
    Iterator<Entry<String, String>> it = indexedHashMap.entrySet().iterator(); 
    while (it.hasNext()) { 
     Map.Entry pair = (Map.Entry)it.next(); 
     System.out.println(pair.getKey() + " = " + pair.getValue()); 
    } 
} 

@SuppressWarnings("rawtypes") 
private static HashMap<String, String> getValueBashedOnIndex(HashMap<String, String[]> hashMap, int i) { 
    HashMap<String, String> indexedHashMap = new HashMap<String, String>(); 
    Iterator<Entry<String, String[]>> it = hashMap.entrySet().iterator(); 
    while (it.hasNext()) { 
     Map.Entry pair = (Map.Entry)it.next(); 
     String[] strArr = (String[]) pair.getValue(); 
     String value = ""; 
     try { 
      value = strArr[(i-1)]; 
     } catch (Exception e) { 
     } 
     indexedHashMap.put((String) pair.getKey(), value); 
    } 
    return indexedHashMap; 
} 

test.properties

menuEntryPoint=0 
indent=\t\t\t 
lines=--------------------------------------------------------- 

mainMenu=M a i n M e n u 
0.0=First Sub Menu, openMenu(1) 
0.1=Second Sub Menu, openMenu(2) 
0.2=Third Sub Menu, openMenu(3) 

1=First Sub Menu 
1.0=Execute this command, executeCommand(...) 
1.1=Execute another command, executeCommand(...) 
1.2=Execute other command, openMenu(A) 

2=First Sub Menu 
2.0=Execute this command, executeCommand(...) 
2.1=Execute another command, executeCommand(...) 
2.2=Execute other command, openMenu(A) 

3=First Sub Menu 
3.0=Execute this command, executeCommand(...) 
3.1=Execute another command, executeCommand(...) 
3.2=Execute other command, openMenu(A) 

test=test1,test2,test3,test1 
0

Рассмотрим с помощью HashMap:

HashMap<String, ArrayList<String>> menuProperties = new HashMap(); 

Вы можете хранить свои свойства в карте (ключ, список значений):

menuProperties.put("key", mylistofvalues); 

Вы можете использовать get() получить свойство:

ArrayList<String> tempList = menuProperties.get("mykey"); 
Смежные вопросы