Java 如何获取列表列表中的某个元素?

Java 如何获取列表列表中的某个元素?,java,list,properties,Java,List,Properties,我希望能够获取列表中的特定元素。但是,该列表包含在另一个列表中。这样做的原因是我读取了一个属性文件,其中的键有多个赋值,并用逗号分隔。我为每个键及其值创建一个列表,并将其添加到另一个列表中,该列表包含每个键及其值的多个列表 # Menu properties file menuEntryPoint=0 indent=\t\t\t lines=--------------------------------------------------------- mainMenu=M a i n

我希望能够获取列表中的特定元素。但是,该列表包含在另一个列表中。这样做的原因是我读取了一个属性文件,其中的键有多个赋值,并用逗号分隔。我为每个键及其值创建一个列表,并将其添加到另一个列表中,该列表包含每个键及其值的多个列表

# 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.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));

但是我得到了你看到的第一个输出。。。任何帮助都将不胜感激。

考虑使用
HashMap

HashMap<String, ArrayList<String>> menuProperties = new HashMap();
您可以使用
get()
获取属性:

ArrayList<String> tempList = menuProperties.get("mykey");
ArrayList tempList=menuProperties.get(“mykey”);

考虑使用
HashMap

HashMap<String, ArrayList<String>> menuProperties = new HashMap();
您可以使用
get()
获取属性:

ArrayList<String> tempList = menuProperties.get("mykey");
ArrayList tempList=menuProperties.get(“mykey”);

检查下面的基于代码的快速解决方案,没有这种基于API的解决方案可以满足您的要求

如果要获取所有第一个逗号值,请使用
HashMap indexedHashMap=getValueBashedOnIndex(HashMap,1),如果是第三个逗号值,则使用
HashMap 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;
}

检查下面的快速代码解决方案,没有这样的基于API的解决方案可以满足您的要求

如果要获取所有第一个逗号值,请使用
HashMap indexedHashMap=getValueBashedOnIndex(HashMap,1),如果是第三个逗号值,则使用
HashMap 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;
}

您正在使用Java 7或更高版本?@OSryx这需要与JRE 1.5.0兼容,而不是更高版本……:(您使用的是Java 7或更高版本?@OSryx这需要与JRE 1.5.0兼容而不是更高版本……:(您使用的是Java 7或更高版本?@OSryx这需要与JRE 1.5.0兼容而不是更高版本……):(