farm模块-字符串集合转换工具类

This commit is contained in:
顾君禹
2025-09-01 15:43:21 +08:00
parent efada41b2f
commit aed94bc233

View File

@@ -0,0 +1,170 @@
package cn.iocoder.yudao.module.farm.framework.util;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 字符串集合转换工具类
* 用于在数据库字符串(逗号分隔)和Java集合之间转换
*
* @author 芋道源码
*/
@Slf4j
public class StringCollectionUtil {
/**
* 分隔符
*/
private static final String SEPARATOR = ",";
/**
* 将字符串集合转换为数据库存储的字符串
*
* @param stringList 字符串集合
* @return 逗号分隔的字符串,如果集合为空则返回null
*/
public static String toDatabaseString(List<String> stringList) {
if (stringList == null || stringList.isEmpty()) {
return null;
}
// 过滤空字符串并去重
List<String> filteredList = stringList.stream()
.filter(StrUtil::isNotBlank)
.distinct()
.collect(Collectors.toList());
if (filteredList.isEmpty()) {
return null;
}
return String.join(SEPARATOR, filteredList);
}
/**
* 将数据库字符串转换为字符串集合
*
* @param databaseString 数据库中的字符串
* @return 字符串集合,如果字符串为空则返回空集合
*/
public static List<String> toStringList(String databaseString) {
if (StrUtil.isBlank(databaseString)) {
return new ArrayList<>();
}
try {
return Arrays.stream(databaseString.split(SEPARATOR))
.map(String::trim)
.filter(StrUtil::isNotBlank)
.distinct()
.collect(Collectors.toList());
} catch (Exception e) {
log.error("转换字符串集合失败,原始字符串: {}", databaseString, e);
return new ArrayList<>();
}
}
/**
* 将单个字符串转换为集合(兼容旧数据)
*
* @param singleString 单个字符串
* @return 字符串集合
*/
public static List<String> singleToStringList(String singleString) {
if (StrUtil.isBlank(singleString)) {
return new ArrayList<>();
}
// 如果已经是逗号分隔的格式,直接转换
if (singleString.contains(SEPARATOR)) {
return toStringList(singleString);
}
// 单个字符串,包装成集合
List<String> stringList = new ArrayList<>();
stringList.add(singleString);
return stringList;
}
/**
* 将字符串集合转换为单个字符串(兼容旧接口)
* 取第一个字符串,如果没有则返回null
*
* @param stringList 字符串集合
* @return 第一个字符串或null
*/
public static String stringListToSingle(List<String> stringList) {
if (stringList == null || stringList.isEmpty()) {
return null;
}
return stringList.get(0);
}
/**
* 验证字符串集合是否有效
*
* @param stringList 字符串集合
* @return 是否有效
*/
public static boolean isValidStringList(List<String> stringList) {
if (stringList == null) {
return false;
}
// 检查是否有空字符串
return stringList.stream().allMatch(StrUtil::isNotBlank);
}
/**
* 获取字符串集合的大小
*
* @param stringList 字符串集合
* @return 字符串数量
*/
public static int getStringCount(List<String> stringList) {
if (stringList == null) {
return 0;
}
return stringList.size();
}
/**
* 添加字符串到集合
*
* @param stringList 原字符串集合
* @param newString 新字符串
* @return 新的字符串集合
*/
public static List<String> addString(List<String> stringList, String newString) {
if (StrUtil.isBlank(newString)) {
return stringList != null ? new ArrayList<>(stringList) : new ArrayList<>();
}
List<String> result = stringList != null ? new ArrayList<>(stringList) : new ArrayList<>();
if (!result.contains(newString)) {
result.add(newString);
}
return result;
}
/**
* 从集合中移除字符串
*
* @param stringList 原字符串集合
* @param stringToRemove 要移除的字符串
* @return 新的字符串集合
*/
public static List<String> removeString(List<String> stringList, String stringToRemove) {
if (stringList == null || StrUtil.isBlank(stringToRemove)) {
return stringList != null ? new ArrayList<>(stringList) : new ArrayList<>();
}
List<String> result = new ArrayList<>(stringList);
result.remove(stringToRemove);
return result;
}
}