简体   繁体   English

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

[英]How to get a certain element in a list of lists?

I want to be able to get a particular element in a list. 我希望能够获得列表中的特定元素。 However, that list is contained in another list. 但是,该列表包含在另一个列表中。 The reason so, is that I read in a properties file, with keys having more than one value assigned to it separated by commas. 这样做的原因是,我读取了一个属性文件,并为键分配了多个值,并用逗号分隔。 I create a list for each key and its values, and add it to another list which contains multiple lists for each key and its values. 我为每个键及其值创建一个列表,并将其添加到另一个包含每个键及其值的多个列表的列表中。

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

Below is code I wrote to print it to the screen: 以下是我编写的将其打印到屏幕上的代码:

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

Output: 输出:

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)

How exactly can I print out a certain value of a key that is in a list of lists? 如何准确打印出列表列表中某个键的某个值? I am trying to get my output to look like this, but I'm having trouble doing so. 我试图使我的输出看起来像这样,但是这样做很麻烦。

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

I tried doing the following 我尝试执行以下操作

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

But I am getting the first output you see... Any help would be greatly appreciated. 但我得到的是您看到的第一个输出...任何帮助将不胜感激。

Consider using a HashMap : 考虑使用HashMap

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

You can store your properties in the map (key, list of values): 您可以将属性存储在地图中(键,值列表):

menuProperties.put("key", mylistofvalues);

You can use get() to get the property: 您可以使用get()获取属性:

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

Check below quick code based solution, there is no such API based solution which can meet your requirement. 检查以下基于快速代码的解决方案,没有这样的基于API的解决方案可以满足您的要求。

If you want to get all the 1st comma values then use HashMap<String, String> indexedHashMap = getValueBashedOnIndex(hashMap, 1); 如果要获取所有第一个逗号值,请使用HashMap<String, String> indexedHashMap = getValueBashedOnIndex(hashMap, 1); , and if 3rd comma values then use HashMap<String, String> indexedHashMap = getValueBashedOnIndex(hashMap, 3); ,如果第三个逗号值使用HashMap<String, String> indexedHashMap = getValueBashedOnIndex(hashMap, 3);
Basically second parameter of getValueBashedOnIndex is for which index value you want. 基本上, 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 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM