2015-10-19 2 views
0

Итак, у меня есть hashmap, определяемый как: hashmap<String,LinkedList<node>>. Класс node содержит два поля a и b.Преобразование списков в hashmap в 2-й массив

У меня есть ряд строковых значений, для которых мне нужна информация. Что я хочу сделать, это просмотреть хэш-карту и найти ссылки, связанные с каждым значением, которое у меня есть, и получить список полей «a» в 2d-массив.

Итак, все «a» поля строкового значения «animal» должны быть первым массивом в массиве 2d. Все «a» поля строкового значения «люди» должны быть во втором массиве и т. Д. И т. Д.

Я знаю, что от этого беспорядка, но я надеюсь, что вы поняли суть.

ответ

0

Вам следует подумать о том, чтобы использовать список списков вместо 2D-массива, потому что я уверен, что строки и столбцы будут очень важны, и вы можете не знать начальный размер раньше времени для каждого.

Я сделал несколько предположений, так как вы не указали. Вы можете вносить изменения, необходимые для работы по конкретному сценарию. см. предположения ниже.

Предположения

  1. The "Струны", вы заботитесь о т.е. "Animal", "Человек" ключи от вашего hashMap.
  2. поле a в Node класс имеет тип String
  3. У вас есть список для всех строк, вы заботитесь о

реализация

public static void main(String[] args) throws URISyntaxException, IOException { 
    Map<String, LinkedList<Node>> hashMap = new HashMap<String, LinkedList<Node>>(); 
    List<List<String>> multiDemList = new ArrayList<List<String>>(); //Once the method is done this will contain your 2D list 
    List<String> needInfoOn = new ArrayList<String>(); //This should contain all of the HashMap Keys you are interested in i.e. Animal, Human keys 

    for(String s: needInfoOn){ 
     if(!hashMap.containsKey(s)) continue; //if the map doesnt contain this string then skip to the next so we dont add empty rows in our multidimensional array. remove this line if you want empty rows 
     List<String> list = BuildTypeAList(hashMap, s); 
     multiDemList.add(list); 
    } 
} 

private static List<String> BuildTypeAList(Map<String, LinkedList<Node>> map, String s) { 
    LinkedList<Node> linkedList = map.get(s); 
    ArrayList<String> arrList = new ArrayList<String>(); 
    for(Node n: linkedList) { 
     arrList.add(n.a); 
    } 
    return arrList; 
} 

private static class Node { 
    String a; 
    String b; 
} 
Смежные вопросы