package com.jfireel.expression.util; import com.mixsmart.utils.CustomFunction; import com.mixsmart.utils.ListUtils; import com.mixsmart.utils.StringUtils; import java.util.List; /** * @author yangyj * @Date 2023/3/10 16:41 * @description TODO */ public class ValueUtil { public static Object[] obtain(Object left, Object right) { if (StringUtils.isNotEmpty(left, right)) { if (left instanceof List) { List tmp = CustomFunction.obj2ListNe(left); if (tmp.size() == 0) { return null; } left = sum(tmp); } if (right instanceof List) { List tmp = CustomFunction.obj2ListNe(right); if (tmp.size() == 0) { return null; } right = sum(tmp); } if (StringUtils.isNotEmpty(left) && StringUtils.isNotEmpty(right)) { return new Object[]{left, right}; } } return null; } /** * 判断条件 处理字母+数字的数据 去掉字母 * @param left * @param right * @param letterNumber * @return */ public static Object[] obtain(Object left, Object right, boolean letterNumber) { if (StringUtils.isNotEmpty(left, right)) { if (left instanceof List) { List tmp = CustomFunction.obj2ListNe(left); if (tmp.size() == 0) { return null; } if(tmp.size() == 1){ if(StringUtils.isNumber(tmp.get(0).toString())){ left = Double.valueOf(tmp.get(0).toString()); }else{ left = tmp.get(0); } }else{ left = sum(tmp); } } if (right instanceof List) { List tmp = CustomFunction.obj2ListNe(right); if (tmp.size() == 0) { return null; } if(tmp.size() == 1){ if(StringUtils.isNumber(tmp.get(0).toString())){ right = Double.valueOf(tmp.get(0).toString()); }else{ right = tmp.get(0); } }else{ right = sum(tmp); } } if (StringUtils.isNotEmpty(left) && StringUtils.isNotEmpty(right)) { if (letterNumber) { left = isLetterNumber(left); right = isLetterNumber(right); } return new Object[]{left, right}; } } return null; } public static Object sum(List list) { if (ListUtils.isNotEmpty(list)) { return (float) list.stream().filter(StringUtils::isNumber).map(StringUtils::handleNull).mapToDouble(Double::parseDouble).sum(); } return 0; } public static Object isLetterNumber(Object str){ // 检查是否是字母数字组合(必须同时包含字母和数字,且只包含字母数字) if (str != null && str.toString().matches("^(?=.*[a-zA-Z])(?=.*\\d)[a-zA-Z\\d]+$")) { // 提取所有数字 return Double.valueOf(str.toString().replaceAll("[^0-9]", "")); } return str; } }