2013-12-11 91 views
0

我有一张表,显示了一个字幕结构,该字幕结构以1,2,3的正确顺序排序..... TitleID是唯一的。如何将字幕结构的列表<String[]>转换为HashMap <String,List <String[]>>

 
TitleID - Title - Level - Order 
451 - History - Level1 - 1 
123 - History of America - Level2 - 2 
465 - History of Cali - Level3 - 3 
578 - History of NewYork - Level3 - 4 
765 - History of Europe - Level2 - 5 
754 - History of West Europe - Level3 - 6 

此表被转换成{"451", "History", "Level1", "1" }{"123", "History of America", "Level2", "2" }一个List<String[]> ...也是一个正确的顺序。我想将List<String[]>转换为HashMap<String, List<String[]>>。如果我做手工,它应该是这样的:

HashMap<String, List<String[]>> titleHashMap = new HashMap<String, List<String[]>>(); 

List<String[]> subTitleList=new ArrayList<String[]>; 
String[] titles1={"123", "History of America", "Level2"}; 
subTitleList.add(titles1); 
String[] titles12={"765", "History of Europe", "Level2"}; 
subTitleList.add(titles12); 
titleHashMap.put("451", subTitleList); 

List<String[]> subTitleList2=new ArrayList<String[]>; 
String[] titles2={"465", "History of Cali" , "Level3"}; 
subTitleList2.add(titles2); 

String[] titles21={"578", "History of NewYork", "Level3"}; 
subTitleList2.add(titles21); 

titleHashMap.put("123", subTitleList2); 

但我不想做手工,所以如何自动做呢? 注意:我也想要一个所有Level1父级的根级别。例如,titleHashMap.put("root", subTitleListOfLevel1);

+0

在'for-each'循环中执行此操作。 –

+0

如果字符串数组的大小:“{”123“,”美国历史“,”Level2“}'是有限的,只反映了一些属性,为什么不用OOP风格? – Sage

+0

更复杂 – Tum

回答

1

您的示例没有说明课程是如何分组的,以及地图的关键是什么。我假设这些课程是按等级分组的,关键是等级。但您可以轻松调整它。

// already exists: 
List<String[]> lessons = ... 

// final format 
final HashMap<String, List<String[]>> titleHashMap = new HashMap<String, List<String[]>>(); 

for (String[] lesson : lessons) { 
    final String level = lesson[2]; 
    if (!titleHashMap.containsKey(level)) { 
     titleHashMap.put(level, new ArrayList<String[]>()); 
    } 
    titleHashMap.get(level).add(lesson); 
} 
相关问题