文章介绍
项目中,我们通常会使用枚举保存一些对象的状态值。
比如项目的四种状态
- (0,开发)
- (1,完成)
- (2,维护)
- (3,暂停)
现在我有一个这样的需求,我要获取人员A参与的所有项目,并按照项目的状态未其分类。
我通过Map集合,以状态为键,以相应的项目列表为值,来进行存储。
枚举存储信息
public enum AppStatusEnum {
/**
* 项目状态
*/
//没有参与过项目的人
ONGOING_APP(0, "开发中的项目"),
//正在参与项目的人
DONE_APP(1, "开发完成的项目"),
//已参与过i项目
PAUSED_APP(2, "暂停开发的项目"),
MAINTAIN_APP(3,"维护中的项目");
private final Integer status;
private final String message;
//项目模块的通用枚举
AppStatusEnum(Integer status, String message) {
this.status = status;
this.message = message;
}
// 此方法是关键
public static AppStatusEnum getByStatus(Integer status) {
for ( AppStatusEnum appStatus : values()) {
if (appStatus.getStatus().equals(status)) {
return appStatus;
}
}
return null;
}
}
创建存储集合
Map<Integer,List<AppBaseDTO>> userBaseList = new HashMap<>();
userBaseList.put(AppStatusEnum.ONGOING_APP.getStatus(),new ArrayList<>());
userBaseList.put(AppStatusEnum.DONE_APP.getStatus(),new ArrayList<>());
userBaseList.put(AppStatusEnum.PAUSED_APP.getStatus(),new ArrayList<>());
userBaseList.put(AppStatusEnum.MAINTAIN_APP.getStatus(),new ArrayList<>());
UserBaseDTO userBaseDTO = systemMapper.selectUserJoinAppByUserId(userId);
在集合中添加元素
此时出现了报错:常数表达式需要
解决方法
switch(AppStatusEnum.getByStatus(app.getStatus())){
case ONGOING_APP :
userBaseList.get(AppStatusEnum.ONGOING_APP.getStatus()).add(app);
break;
case DONE_APP :
userBaseList.get(AppStatusEnum.DONE_APP.getStatus()).add(app);
break;
case PAUSED_APP :
userBaseList.get(AppStatusEnum.PAUSED_APP.getStatus()).add(app);
break;
case MAINTAIN_APP :
userBaseList.get(AppStatusEnum.MAINTAIN_APP.getStatus()).add(app);
break;
default:
throw new BadRequestException("数据库或后端配置信息有误,请及时修改");
}