1.实体类
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class CssReportDto implements Serializable {
//渠道
private String bdFrom;
//类型
private String channelType;
//入口
private String channelEntrance;
//进线量
private Long enterSessionVol;
//机器人未转人工量
private Long robotNoTransferVol;
//机器转人工请求量
private Long robotTransferVol;
//机器转人工服务量
private Long robotTransferServiceVol;
//机器转人工接通率
private Long robotTransferAcceptVol;
//人工请求量
private Long manualRequestVol;
//人工接起量
private Long manualAcceptVol;
//有效会话量
private Long validSessionVol;
//无效会话量
private Long inValidSessionVol;
}
lambda合并方法:
ArrayList<CssReportDto> resultList = new ArrayList<>();
//合并list中bdfrom channelType channelEntrance 相同的记录
list.parallelStream().collect(Collectors.groupingBy(e -> (e.getBdFrom() + e.getChannelType() + e.getChannelEntrance()), Collectors.toList())).forEach((a, b) -> {
b.stream().reduce((x, y) ->
new CssReportDto(x.getBdFrom(), x.getChannelType(), x.getChannelEntrance(),
x.getEnterSessionVol() + y.getEnterSessionVol(),
x.getRobotNoTransferVol() + y.getRobotNoTransferVol() ,
x.getRobotTransferVol() + y.getRobotTransferVol() ,
+x.getRobotTransferServiceVol() + y.getRobotTransferServiceVol() ,
x.getRobotTransferAcceptVol() + y.getRobotTransferAcceptVol() ,
x.getManualRequestVol() + y.getManualRequestVol() ,
x.getManualAcceptVol() + y.getManualAcceptVol() ,
x.getValidSessionVol() + y.getValidSessionVol() ,
x.getInValidSessionVol() + y.getInValidSessionVol())
).ifPresent(resultList::add);
});