使用 Java Collections/Map 以编程方式执行 SQL 查询
Performing SQL query programatically with Java Collections/Map
我有 2 个 table 有一个 stringColum,如下所示:
TableA(满):
stringColum doubleColumn
name a 1
name a 2
name b 5
name b 4
name b 1
name c 2
[...]
Table B(TableA 中的 stringColum 中可能有一些缺失值):
stringColum doubleColumn
name b 10
name b 20
name b 30
name c 11
[...]
如何获得一个对象,其值由 doubleColumn 求和并由 stringColum 分组,如下所示(我的意思是,对 table A 和 B 执行此操作,以便我可以在此之后比较它们)?
Table一个(summed/grouped):
stringColum doubleColumn
name a 3
name b 10
name c 2
[...]
Table B (summed/grouped):
stringColum doubleColumn
name b 60
name c 11
[...]
不使用 SQL/JPQL 执行数据库 join/group,我如何使用下面开始的 Collections 来执行此操作?
List<UorPos> uorsList = uf.findAllUPB();
List<Treinamentos> treinamentosList = tf.findAll();
Map<String, Double> orcMap = new HashMap<>();
Map<String, Double> rlzMap = new HashMap<>();
for (UorPos u : uorsList) {
orcMap.put(u.getNomeUorPos(), u.getOrc());
}
for (Treinamentos r : treinamentosList) {
rlzMap.put(r.getDivisao(), r.getValorCurso());
}
上面的for循环只得到table中的第一对寄存器。例如。:
Tablefor循环后的一个resultList(类似于TableB resultList):
stringColum doubleColumn
name a 1
name b 5
name c 2
[...]
如何获取所有值,然后对它们求和,按 stringColumn 分组?
之后,我需要比较两个 table 中的 stringColumn,用 'missingString Column','0' 对填充 Table B。例如:
Table B (summed/grouped):
stringColum doubleColumn
name a 0 // --> this pair of register will be inserted in TableB if a stringColum present in TableA doesn't exist in the Table B
name b 60
name c 11
[...]
提前致谢!
要分组和求和,请使用以下代码:
for (UorPos u : uorsList) {
orcMap.merge(u.getNomeUorPos(), u.getOrc(), (x, y) -> x + y);
}
for (Treinamentos r : treinamentosList) {
rlzMap.merge(r.getDivisao(), r.getValorCurso(), (x, y) -> x + y);
}
或者如果您不使用 Java 8:
for (UorPos u : uorsList) {
String key = u.getNomeUorPos();
if (orcMap.containsKey(key)) {
orcMap.put(key, orcMap.get(key) + u.getOrc());
} else {
orcMap.put(key, u.getOrc());
}
}
for (Treinamentos r : treinamentosList) {
String key = r.getDivisao();
if (rlzMap.containsKey(key)) {
rlzMap.put(key, rlzMap.get(key) + r.getValorCurso());
} else {
rlzMap.put(key, r.getValorCurso());
}
}
要将缺失的项目添加到第二张地图,请使用以下代码:
for (String key : orcMap.keySet()) {
rlzMap.putIfAbsent(key, 0.0);
}
或者如果您不使用 Java 8:
for (String key : orcMap.keySet()) {
if (!rlzMap.containsKey(key)) {
rlzMap.put(key, 0.0);
}
}
我有 2 个 table 有一个 stringColum,如下所示:
TableA(满):
stringColum doubleColumn
name a 1
name a 2
name b 5
name b 4
name b 1
name c 2
[...]
Table B(TableA 中的 stringColum 中可能有一些缺失值):
stringColum doubleColumn
name b 10
name b 20
name b 30
name c 11
[...]
如何获得一个对象,其值由 doubleColumn 求和并由 stringColum 分组,如下所示(我的意思是,对 table A 和 B 执行此操作,以便我可以在此之后比较它们)?
Table一个(summed/grouped):
stringColum doubleColumn
name a 3
name b 10
name c 2
[...]
Table B (summed/grouped):
stringColum doubleColumn
name b 60
name c 11
[...]
不使用 SQL/JPQL 执行数据库 join/group,我如何使用下面开始的 Collections 来执行此操作?
List<UorPos> uorsList = uf.findAllUPB();
List<Treinamentos> treinamentosList = tf.findAll();
Map<String, Double> orcMap = new HashMap<>();
Map<String, Double> rlzMap = new HashMap<>();
for (UorPos u : uorsList) {
orcMap.put(u.getNomeUorPos(), u.getOrc());
}
for (Treinamentos r : treinamentosList) {
rlzMap.put(r.getDivisao(), r.getValorCurso());
}
上面的for循环只得到table中的第一对寄存器。例如。: Tablefor循环后的一个resultList(类似于TableB resultList):
stringColum doubleColumn
name a 1
name b 5
name c 2
[...]
如何获取所有值,然后对它们求和,按 stringColumn 分组?
之后,我需要比较两个 table 中的 stringColumn,用 'missingString Column','0' 对填充 Table B。例如:
Table B (summed/grouped):
stringColum doubleColumn
name a 0 // --> this pair of register will be inserted in TableB if a stringColum present in TableA doesn't exist in the Table B
name b 60
name c 11
[...]
提前致谢!
要分组和求和,请使用以下代码:
for (UorPos u : uorsList) {
orcMap.merge(u.getNomeUorPos(), u.getOrc(), (x, y) -> x + y);
}
for (Treinamentos r : treinamentosList) {
rlzMap.merge(r.getDivisao(), r.getValorCurso(), (x, y) -> x + y);
}
或者如果您不使用 Java 8:
for (UorPos u : uorsList) {
String key = u.getNomeUorPos();
if (orcMap.containsKey(key)) {
orcMap.put(key, orcMap.get(key) + u.getOrc());
} else {
orcMap.put(key, u.getOrc());
}
}
for (Treinamentos r : treinamentosList) {
String key = r.getDivisao();
if (rlzMap.containsKey(key)) {
rlzMap.put(key, rlzMap.get(key) + r.getValorCurso());
} else {
rlzMap.put(key, r.getValorCurso());
}
}
要将缺失的项目添加到第二张地图,请使用以下代码:
for (String key : orcMap.keySet()) {
rlzMap.putIfAbsent(key, 0.0);
}
或者如果您不使用 Java 8:
for (String key : orcMap.keySet()) {
if (!rlzMap.containsKey(key)) {
rlzMap.put(key, 0.0);
}
}