我有两个具有stringColum的表,如下所示:
表A(全表):
stringColum doubleColumn
name a 1
name a 2
name b 5
name b 4
name b 1
name c 2
[...]表B(在stringColum中可能有TableA中缺少的一些值):
stringColum doubleColumn
name b 10
name b 20
name b 30
name c 11
[...]如何获得一个对象的值,其值之和为doubleColumn,并按stringColum分组如下(我的意思是,对表A和表B这样做,以便在此之后比较它们)?
表A(汇总/分组):
stringColum doubleColumn
name a 3
name b 10
name c 2
[...]表B(汇总/分组):
stringColum doubleColumn
name b 60
name c 11
[...]与使用SQL/JPQL来执行do /group不同,我如何使用如下所示的集合来执行呢?
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循环只从表中获取第一对寄存器。例如: for循环之后的TableA resultList (类似于TableB resultList):
stringColum doubleColumn
name a 1
name b 5
name c 2
[...]我怎样才能得到所有的值,然后按照stringColumn进行分组呢?
在此之后,我需要比较两个表中的stringColumn,用'missingString‘列'0’填充表B。例如:
表B(汇总/分组):
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
[...]提前感谢!
发布于 2015-03-02 13:47:23
若要分组和求和,请使用以下代码:
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);
}
}https://stackoverflow.com/questions/28810730
复制相似问题