我正在尝试将结果集数据推送到嵌套地图上。老实说,我一直在努力解决如何做到这一点的逻辑。以下是我的结果集数据的示例
ID Main Sub 1 Root Carrots 2 Root Beets 3 Root Turnips 4 Leafy Spinach 5 Leafy Celery 6 Fruits Apples 7 Fruits Oranges
我创建了一个hashmap HashMap<Integer, HashMap<String, List<String>>>
,其中我认为innermap可以将主col作为键,将相应的subs作为值列表。 outermap将包含id作为键,相应的map作为值。我正在努力实现这一目标。
任何帮助都将不胜感激。
答案 0 :(得分:0)
以下是您的问题的答案。但问题可能是错误的。由于ID是唯一的(只是猜测),您可能正在寻找
Map<Integer, DataObject> map = new HashMap<>();
其中DataObject是包含变量main
和sub
的POJO。将数据添加到这样的结构很容易。
回答问题(添加以向您展示地图和列表的工作原理):
private Map<Integer, Map<String, List<String>>> map = new HashMap<>();
public static void main(String[] args) {
new Tester().go();
}
private void go() {
add(1, "Root", "Carrots");
add(2, "Root", "Beets");
add(3, "Root", "Turnips");
add(4, "Leafy", "Spinach");
add(5, "Leafy", "Celery");
add(6, "Fruits", "Apples");
add(7, "Fruits", "Oranges");
}
private void add(int id, String main, String sub) {
if (!map.containsKey(id)) {
map.put(id, new HashMap<String, List<String>>());
}
ArrayList<String> list = new ArrayList<String>();
list.add(sub);
map.get(id).put(main, list);
}
答案 1 :(得分:0)
我建议使用不同的结构。 您有唯一的ID和子,但您的Main可能是重复的。 因此我建议使用以下结构: 的HashMap&GT; 其中POJO有ID和sub。 地图的关键是主要的。 因此,您可以轻松地做到:
if (map.get(main)==null){
List<POJO> pojoList= new List<>();
pojolist.add(pojo);
}else{
List<POJO> pojoList=map.get(main);
pojoList.add(pojo);
}
但最终取决于你是否需要使用ID或main进行查找。
答案 2 :(得分:0)
不需要创建嵌套哈希映射,因为示例中的每一行都是唯一的(嵌套映射中的每个List只有一个值)。
在任何情况下,这里都是Java 8风格的算法示例,以满足您的特殊需求:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<ResultSet> rows = new ArrayList<>();
rows.add(new ResultSet().setId(1).setMain("Root").setSub("Carrots"));
rows.add(new ResultSet().setId(2).setMain("Root").setSub("Beets"));
rows.add(new ResultSet().setId(3).setMain("Root").setSub("Turnips"));
rows.add(new ResultSet().setId(4).setMain("Leafy").setSub("Spinach"));
rows.add(new ResultSet().setId(5).setMain("Leafy").setSub("Celery"));
rows.add(new ResultSet().setId(6).setMain("Fruits").setSub("Apples"));
rows.add(new ResultSet().setId(7).setMain("Fruits").setSub("Oranges"));
HashMap<Integer, HashMap<String, List<String>>> result = new HashMap<>();
rows.forEach(row -> {
HashMap<String, List<String>> subsByMain = result.getOrDefault(row.getId(), new HashMap<>());
List<String> subs = subsByMain.getOrDefault(row.getMain(), new ArrayList<>());
subs.add(row.getSub());
subsByMain.put(row.getMain(), subs);
result.put(row.getId(), subsByMain);
});
}
static class ResultSet {
private Integer id;
private String main;
private String sub;
Integer getId() {
return id;
}
ResultSet setId(Integer id) {
this.id = id;
return this;
}
String getMain() {
return main;
}
ResultSet setMain(String main) {
this.main = main;
return this;
}
String getSub() {
return sub;
}
ResultSet setSub(String sub) {
this.sub = sub;
return this;
}
}
}