繁体   English   中英

如何选择特定的哈希图 <String,String> 从列表中按其值

[英]How to select a particular hashmap<String,String> from a list by its value

我对Java相当陌生,一直在到处寻找答案。

我运行一个sql查询,并使用响应从列名和值构建一个哈希表列表。

List<HashMap<String,String>> rulesList = Sql.getStuff("abc");

这会给我这样的列表:{column_1 = abc,column_3 = ghi,column_2 = def}

我想用这个清单做两件事。 首先,我想查看是否有任何列包含特定值(ruleName)。 这部分足够体面。

if (rulesList.get(0).containsValue(ruleName)) {
    System.out.println("Expected: " + ruleName);
    System.out.println("Actual: " + ruleName); //Would like to change this to include the actual column name and result

然后,我想检查名称中具有特定短语的所有其他列,以查看它们是否包含值,例如“ column_1,column_2,column_3”中的单词“ column”。 如果它们确实包含该值,那么我想打印出列名和值。

但是,这是我遇到不知道如何从列表中进行选择的问题。 如何仅获取column_2及其随附数据,或与值abc相关联的列名称?

我认为您只需要词汇表: 哈希图将一个 (唯一)与一个相关联。

因此,有了这些关键字,您就可以轻松找到答案,例如:

首先,我想看看是否有任何列包含特定值(ruleName)

是一个例子

然后,我想检查名称中具有特定短语的所有其他列,以查看是否...

那里

像这个例子?

       List<HashMap<String,String>> rulesList = new ArrayList<HashMap<String,String>>() {{
            for (int i = 0; i < 4; i++) {
                HashMap<String,String> map = new HashMap<>();
                map.put("key", Integer.toString(i));
                map.put("column1", "Value in Column1 in row " + i);
                map.put("column2", "Value in Column2 in row " + i);
                add(map);
            }
        }};

        for (HashMap<String,String> row : rulesList) {
            for (String columnName : row.keySet()) {
                // look for a column name
                if(columnName.contains("column")) {
                     System.out.printf("Column \"%s\" has a value of \"%s\"%n", columnName, row.get(columnName));
                }
                // look for a cell value
                if(row.get(columnName).matches(".+Column\\d in row 1")) {
                    System.out.printf("Value found in %s, row %s%n", columnName, row.get("key"));
                }
            }
        }

您的问题以哈希表列表为前提

根据您的问题,您可能正在尝试使用以下结构:

List_Row<HashMap<String_ColumnName, String_Value>>

如果是这种情况,请考虑修改您的存储结构并存储一个带有列表的哈希图:

HashMap_ColumnName<ArrayList<String_Values>>

那么您可以简单地抓住一列并浏览数据。 要将行作为列表返回,您可以编写一个函数轻松完成此操作

getRow(i) {
    HashMap<String,String> row = new HashMap<String,String>()
    for(k:results) {
        row.put(k, results.get(k).get(i))
    }
return row
}

暂无
暂无

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

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