阿里百度华为消息队列MQ异步场景面试题(下)

简介: 阿里百度华为消息队列MQ异步场景面试题

3 java8

业务需求里需要按某几个字段去重(acctId,billingCycleId,prodInstId,offerId)

我这里想到了遍历集合areaDatas 后用contains方法判断 重写AcctItemYzfBean实体类的equals方法实现,

请问有没有更好的方法? 代码如下

List<AcctItemYzfBean> newList = new CopyOnWriteArrayList<>();
//循环过滤、增强翼支付数据
Optional.ofNullable(areaDatas)//集合判空
.orElse(new ArrayList<>())
.stream()//转化为流 便于下面过滤和增强数据
.filter(Objects::nonNull)//元素判空
.filter(yzfBean -> this.judgeIfOfferId(yzfBean))//判断销售品ID是否相同
.filter(yzfBean -> this.enhanceYzfBean(yzfBean))//增强过滤accNbr和acctId
.filter(yzfBean -> this.judgeIfArrears(yzfBean))//判断是否不欠费
.filter(yzfBean -> this.judgeIfCancel(yzfBean))//判断是否销账金额大于0
.filter(yzfBean -> this.judgeIfReturn(yzfBean))//判断是否上月未返还
.forEach(yzfBean -> {
//去重 重写AcctItemYzfBean.equals方法
if(!newList.contains(yzfBean)) {
//增强latnName
yzfBean.setLatnName(commonRegionMap.get(yzfBean.getRegionId()));
//增强areaCode
yzfBean.setAreaCode(areaCode);
//数据封装
newList.add(yzfBean);
}
});
重写的equals方法
@Override
public boolean equals(Object yzfBeanObj) {
if(yzfBeanObj instanceof AcctItemYzfBean) {
AcctItemYzfBean yzfBean = (AcctItemYzfBean) yzfBeanObj;
if(Tools.isEmpty(yzfBean.getAcctId(), yzfBean.getBillingCycleId(), yzfBean.getProdInstId(), yzfBean.getOfferId())) {
return false;
}
if(yzfBean.getAcctId().equals(this.acctId) && yzfBean.getBillingCycleId().equals(this.billingCycleId)
&& yzfBean.getProdInstId().equals(this.prodInstId) && yzfBean.getOfferId().equals(this.offerId)) {
return true;
}
}
return super.equals(yzfBeanObj);
}

解:

比如下面的类,id1和id2重复认为是重复的,id3不需要考虑

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
static class Test {
private String id1;
private String id2;
@EqualsAndHashCode.Exclude
private String id3;
}

通过Set去重或者通过distinct去重即可:

List<Test> list = new ArrayList<>();
list.add(new Test("a","b","c"));
list.add(new Test("a","b","d"));
System.out.println(list.stream().collect(Collectors.toSet()));
System.out.println(list.stream().distinct().collect(Collectors.toList()));
相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
12月前
|
监控 Java 数据安全/隐私保护
阿里面试:SpringBoot启动时, 如何执行扩展代码?你们项目 SpringBoot 进行过 哪些 扩展?
阿里面试:SpringBoot启动时, 如何执行扩展代码?你们项目 SpringBoot 进行过 哪些 扩展?
|
9月前
|
消息中间件 存储 Java
RabbitMQ 和 Spring Cloud Stream 实现异步通信
本文介绍了在微服务架构中,如何利用 RabbitMQ 作为消息代理,并结合 Spring Cloud Stream 实现高效的异步通信。内容涵盖异步通信的优势、RabbitMQ 的核心概念与特性、Spring Cloud Stream 的功能及其与 RabbitMQ 的集成方式。通过这种组合,开发者可以构建出具备高可用性、可扩展性和弹性的分布式系统,满足现代应用对快速响应和可靠消息传递的需求。
491 2
RabbitMQ 和 Spring Cloud Stream 实现异步通信
|
11月前
|
负载均衡 架构师 Cloud Native
阿里面试:服务与发现 ,该选 CP 还是 AP?为什么?
阿里面试:服务与发现 ,该选 CP 还是 AP?为什么?
阿里面试:服务与发现 ,该选  CP 还是 AP?为什么?
|
消息中间件 架构师 Java
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
美团面试:对比分析 RocketMQ、Kafka、RabbitMQ 三大MQ常见问题?
|
SQL Java 数据库连接
阿里腾讯互联网公司校招 Java 面试题总结及答案解析
本文总结了阿里巴巴和腾讯等互联网大厂的Java校招面试题及答案,涵盖Java基础、多线程、集合框架、数据库、Spring与MyBatis框架等内容。从数据类型、面向对象特性到异常处理,从线程安全到SQL优化,再到IOC原理与MyBatis结果封装,全面梳理常见考点。通过详细解析,帮助求职者系统掌握Java核心知识,为校招做好充分准备。资源链接:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
518 2
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
存储 算法 架构师
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案
阿里面试:PS+PO、CMS、G1、ZGC区别在哪?什么是卡表、记忆集、联合表?问懵了,尼恩来一个 图解+秒懂+史上最全的答案

相关产品

  • 云消息队列 MQ