枚举限制变量只能是预先设定好的值。使用枚举可以减少代码中的 bug 例如,我们为果汁店设计一个程序,它将限制果汁为小杯、中杯、大杯。这就意味着它不允许顾客点除了这三种尺寸外的果汁。
注意:枚举可以单独声明或者声明在类里面。方法、变量、构造函数也可以在枚举中定义。
import org.apache.commons.lang3.StringUtils; import java.util.Objects; public enum CmpTypeEnum { LOANBALANCECOTRAST(0, "a"), OLBANKBALANCE(1, "b"), OLBANKAMOUNT(2, "c"); private Integer state; private String message; public Integer getState() { return state; } public String getMessage() { return message; } CmpTypeEnum(Integer state, String message) { this.state = state; this.message = message; } public static CmpTypeEnum stateOf(Integer value) { for (CmpTypeEnum item : values()) { if (Objects.equals(item.getState(), value)) { return item; } } return null; } public static CmpTypeEnum msgOf(String message) { for (CmpTypeEnum item : values()) { if (StringUtils.equals(item.getMessage(), message)) { return item; } } return null; } }
定义枚举数据,方块中的类型可任意
这里需注意要与枚举数据的类型同步。
遍历这个枚举并附初始值
Map<Object, Object> resultMap = new HashMap<>();
//赋初始值{"a":null,"b":null}
Arrays.stream(CmpTypeEnum.values()).forEach(e -> resultMap.put(e.getMessage(), null));
QueryWrapper<CompareResultModel> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().select(CompareResultModel::getCompareType, CompareResultModel::getResultStatus) .eq(CompareResultModel::getCompareFlag, 0) .groupBy(CompareResultModel::getCompareType, CompareResultModel::getResultStatus); List<CompareResultModel> groupList = this.list(queryWrapper); //进行分组 Map<Integer, List<CompareResultModel>> collect = groupList.stream().collect(Collectors.groupingBy(CompareResultModel::getCompareType)); //循环这个数组 for (Map.Entry<Integer, List<CompareResultModel>> entry : collect.entrySet()) { //通过枚举获取英文名 CmpTypeEnum cmpTypeEnum = CmpTypeEnum.stateOf(entry.getKey()); if (Objects.isNull(cmpTypeEnum)) { continue; } boolean shouldSame = entry.getValue().stream().allMatch(e -> Objects.equals(e.getResultStatus(), 1)); resultMap.put(cmpTypeEnum.getMessage(), shouldSame); } return ServerResponse.createBySuccess(resultMap);