1、上代码
package com.hst.mc.terminal.api.enums;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.Arrays;
import java.util.Comparator;
/**
* 终端能力枚举
*
* @auther linxianmin
* @date 2022/05/06
*/
@Getter
@RequiredArgsConstructor
public enum AbilityEnum {
ATTENDANCER(0, "考勤"),
SPEECHER(1, "开课"),
LISTENER(2, "入课"),
CALLER(3, "呼叫"),
CALLEE(4, "被呼"),
INTERACTER(5, "课中互动"),
PATROLER(6, "巡课"),
RESEACHER(7, "教研"),
MEETINGER(8, "会议"),
WHITEBOARDER(9, "白板"),
POWEROFF(10, "关机"),
REBOOTER(11, "重启");
/**
* 序号
*/
private final Integer code;
/**
* 描述
*/
private final String desc;
/**
* 获取能力标识拼接字符串
* @param abilityEnums 能力标识
* @return 拼接字符串
*/
public static String getConcatStr(AbilityEnum... abilityEnums) {
if (ObjectUtil.isEmpty(abilityEnums)) {
return null;
}
return StrUtil.join(StrUtil.COMMA, Arrays.stream(abilityEnums)
.sorted(Comparator.comparing(AbilityEnum::getCode)).map(item -> item.name().toLowerCase()).toArray());
}
/**
* 校验能力标识是否都存在
* @param ability 能力标识字符串
* @return 是否存在
*/
public static boolean checkIsExist(String ability) {
if (StrUtil.isEmpty(ability)) {
return false;
}
return Arrays.stream(StrUtil.split(ability, StrUtil.COMMA)).allMatch(str ->
Arrays.stream(AbilityEnum.values()).anyMatch(item -> item.name().equalsIgnoreCase(str)));
}
}
2、代码讲解
/**
* 描述
*/
private final String desc;
/**
* 获取能力标识拼接字符串
* @param abilityEnums 能力标识
* @return 拼接字符串
*/
public static String getConcatStr(AbilityEnum... abilityEnums) {
if (ObjectUtil.isEmpty(abilityEnums)) {
return null;
}
return StrUtil.join(StrUtil.COMMA, Arrays.stream(abilityEnums)
.sorted(Comparator.comparing(AbilityEnum::getCode)).map(item -> item.name().toLowerCase()).toArray());
}
里面先将abilityEnums根据code进行排序,然后转成数组存放枚举名称小写的,最后使用StrUtil.join方法将值使用,分隔拼接为字符串。
/**
* 校验能力标识是否都存在
* @param ability 能力标识字符串
* @return 是否存在
*/
public static boolean checkIsExist(String ability) {
if (StrUtil.isEmpty(ability)) {
return false;
}
return Arrays.stream(StrUtil.split(ability, StrUtil.COMMA)).allMatch(str ->
Arrays.stream(AbilityEnum.values()).anyMatch(item -> item.name().equalsIgnoreCase(str)));
}
首先ability拼接的字符串拆分为数组,然后遍历所有,然后用枚举的值挨个和遍历值比较,有一个匹配就返回true,allMatch是全部元素匹配,anyMatch是任何一个元素匹配。