Я пытаюсь сделать group by
как в mySQL, у меня есть несколько столбцов (свойств), и я должен сгруппировать по двум полям (socio
и idSolicitudEgreso
) и суммировать еще одно (montoPago
). Я сделал:
Map<String, Map<String, Integer>> mymap = santa.stream()
.collect(Collectors.groupingBy(Santander::getPanSocio,
Collectors.groupingBy(Santander::getPanIdsolicitudegreso,
Collectors.summingInt(Santander::getPanMontopago))));
mymap.forEach((key, value) -> System.out.println(key + ":" + value));
Мой объект класса:
public class Santander {
private String panRutbeneficiario;
private String panNombrebeneficiario;
private String panEmailbeneficiario;
private String panMetodopago;
private String panCodigobancoabono;
private String panTipocuentaabono;
private String panNumcuentaabono;
private String panFechapago;
private String panCampobanco1;
private String panCampobanco2;
private int panMontopago;
private String panTipocuentacargodet;
private String panNumcuentacargodet;
private String panCodigosucursal;
private String panReferenciacliente;
private String panRetencionfactura;
private String panAbonovalesvistalinea;
private String panCantidaddocumentos;
private String panSocio;
private String panIdsolicitudegreso;
}
Я получаю этот результат с этим кодом:
БАНКО ДЕЛЬ ЭСТАДО:{35113=3026882}
Как видите, я очень хорошо получаю группу (также socio
, id
и sum
), но мне нужно получить все объекты или список объектов. Я просто получаю 3 из 20 полей. Какое изменение я должен внести в свой код потока Java, чтобы получить список объектов (сгруппированных)? Пожалуйста?
Спасибо
PS: результат, который я ожидаю:
{ panRutbeneficiario=146174558, panNombrebeneficiario=No Definido,
panEmailbeneficiario=, panMetodopago=CAT_CSH_TRANSFER, panCodigobancoabono=12,
panTipocuentaabono=Ahorro, panNumcuentaabono=8275301, panFechapago=2020-07-30,
panCampobanco1=, panCampobanco2=, panMontopago=111960,
panTipocuentacargodet=CAT_CSH_CCTE, panNumcuentacargodet=null,
panCodigosucursal=, panReferenciacliente=, panRetencionfactura=,
panAbonovalesvistalinea=null, panCantidaddocumentos=null,
panSocio=BANCO DEL ESTADO, panIdsolicitudegreso=35113
}
summingInt
, который уменьшает внутренние значения доInteger
суммы одного поля, внутренние значения будутList<Santander>
, если это то, чего вы ожидаете. Затем вы можете перебрать этот список и суммировать егоpanMontopago
. напримерMap<String, Map<String, List<Santander>>> mymap = santa.stream().collect(Collectors.groupingBy(Santander::getPanSocio, Collectors.groupingBy(Santander::getPanIdsolicitudegreso)));
, а затем выполнитеget
на этомMap
по желанию. - person Naman   schedule 24.09.2020List<Santander>
? Какие значения должны быть предоставлены для полей, не входящих в группу? - person Alex Rudenko   schedule 24.09.2020