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是任何一个元素匹配。
这段代码定义了一个枚举类`AbilityEnum`,用于表示终端的各种能力,如考勤、开课、入课等。枚举中包含了获取能力标识拼接字符串的方法`getConcatStr()`,用于按序号排序后生成逗号分隔的字符串,以及校验能力标识是否存在的方法`checkIsExist()`,用于检查输入字符串中的能力标识是否都存在于枚举中。
7455

被折叠的 条评论
为什么被折叠?



