I am using a function in a SpringBoot @RestController, with Lombok
This function is an intermediate result that permit me to do an aggregation between two classes.
This 2 classes are:
@Data
public class AchMatiereCmdCptAggDto implements Serializable {
private static final long serialVersionUID = 4022154955808447185L;
private String codService;
private String codSociete;
private String numCompte;
private String codCommande;
private Double mntCommandeHTLCY;
private Double mntLivreHTLCY;
private Double mntFactureHTLCY;
}
@Getter
@Setter
public class AchMatiereCompteCommandeAggFullDto extends AchMatiereCmdCptAggDto implements Serializable {
private static final long serialVersionUID = 6357406952790844723L;
private Date dateCommande;
private String codFournisseur;
private String libFournisseur;
private Boolean booFournisseurIntragroupe;
private Long idCommandeEtat;
}
public static String stringConcat(String ... elements) {
return new StringBuilder().append(elements).toString();
}
I use them that way, and I want to improve forEach part, and any other improvable piece of code:
public List<AchMatiereCompteCommandeAggFullDto> mergeAchat(List<AchMatiereCompteCommandeAggFullDto> achats,
List<AchMatiereCmdCptAggDto> achats2) {
Set<AchMatiereCmdCptAggDto> setAchats = new HashSet<>(achats2);
Map<String, AchMatiereCmdCptAggDto> map = setAchats.stream()
.collect(Collectors.toMap(
p -> stringConcat(p.getNumCompte(), p.getCodCommande()),
p -> p, (ach1, ach2) -> ach2
));
achats.stream().forEach(achat -> {
String k = stringConcat(achat.getCodSociete(), achat.getCodService(), achat.getNumCompte(), achat.getCodCommande());
if (map.containsKey(k)) {
achat.setMntFactureHTLCY(map.get(k).getMntFactureHTLCY());
}
});
return achats;
}
I was thinking about using a StringBuilder
for the concatenation of attributes.
I would also like to avoid forEach, and use a Map
or something like this.
Thanks for your help.