我是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相关联的列名?
答案 0 :(得分:0)
我认为你只需要词汇:hashmap将键(唯一)与一个值相关联。
因此,考虑到这些关键字,您可以轻松找到答案,例如:
首先我要查看是否有任何列包含特定值(ruleName)
Here就是一个例子
然后我想检查名称中有特定短语的所有其他列,看看是否......
答案 1 :(得分:0)
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"));
}
}
}
答案 2 :(得分:0)
你的问题是以一个哈希映射列表为前提的
根据您的问题,您可能会尝试使用此结构:
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
}