2016-01-07 1 views
0

Я довольно новичок в Java и искал всюду для ответа.Как выбрать конкретный хэш-файл <String, String> из списка по его значению

Запуск sql-запроса и использование ответа для создания списка хэш-карт из имени столбца и значений.

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

Это заставляет меня список как этот {column_1 = азбука, column_3 = ГХИ, column_2 = Защиту}

Я хочу сделать две вещи с этим списком. Прежде всего, я хочу увидеть, содержит ли какой-либо столбец конкретное значение (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_2 и его сопровождающие данные, или имя столбца, связанное со значением abc?

ответ

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")); 
       } 
      } 
     } 
+0

Это именно то, что мне нужно. Большое спасибо. – PurpleTaco

0

Я думаю, вам просто нужно словарный запас: а hashmap ассоциирует ключ (уникальный) с одним значение.

Так что с ключевыми словами в виде, вы можете легко найти ответ, как:

Прежде всего я хочу, чтобы увидеть, если какой-либо столбец содержит определенное значение (RuleName)

Here пример

Тогда я хочу, чтобы проверить, все остальные столбцы, которые имеют определенную фразу в их названии, чтобы увидеть, если ...

И there.

+0

Спасибо Тотем. Без этих подробностей я бы не смог понять ответ SlumpA. Используя ответы обоих ваших парней, я смог выработать решение моей проблемы. – PurpleTaco

+0

Рад помочь, не забудьте отметить вашу проблему как решение. – Totem

0

ваш вопрос основывается вокруг списка HashMaps

Основываясь на ваш вопрос, это выглядит, как вы, возможно, пытается использовать эту структуру:

List_Row<HashMap<String_ColumnName, String_Value>> 

Если это так, рассмотрите возможность изменения структуры хранилища и сохранения хэш-карты со списком:

HashMap_ColumnName<ArrayList<String_Values>> 

, тогда y ou может просто захватить колонку и просмотреть данные. чтобы получить строку назад как список, вы можете написать функцию, чтобы сделать это довольно легко

getRow(i) { 
    HashMap<String,String> row = new HashMap<String,String>() 
    for(k:results) { 
     row.put(k, results.get(k).get(i)) 
    } 
return row 
} 
Смежные вопросы