ValueUtil.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package com.jfireel.expression.util;
  2. import com.mixsmart.utils.CustomFunction;
  3. import com.mixsmart.utils.ListUtils;
  4. import com.mixsmart.utils.StringUtils;
  5. import java.util.List;
  6. /**
  7. * @author yangyj
  8. * @Date 2023/3/10 16:41
  9. * @description TODO
  10. */
  11. public class ValueUtil {
  12. public static Object[] obtain(Object left, Object right) {
  13. if (StringUtils.isNotEmpty(left, right)) {
  14. if (left instanceof List) {
  15. List<Object> tmp = CustomFunction.obj2ListNe(left);
  16. if (tmp.size() == 0) {
  17. return null;
  18. }
  19. left = sum(tmp);
  20. }
  21. if (right instanceof List) {
  22. List<Object> tmp = CustomFunction.obj2ListNe(right);
  23. if (tmp.size() == 0) {
  24. return null;
  25. }
  26. right = sum(tmp);
  27. }
  28. if (StringUtils.isNotEmpty(left) && StringUtils.isNotEmpty(right)) {
  29. return new Object[]{left, right};
  30. }
  31. }
  32. return null;
  33. }
  34. /**
  35. * 判断条件 处理字母+数字的数据 去掉字母
  36. * @param left
  37. * @param right
  38. * @param letterNumber
  39. * @return
  40. */
  41. public static Object[] obtain(Object left, Object right, boolean letterNumber) {
  42. if (StringUtils.isNotEmpty(left, right)) {
  43. if (left instanceof List) {
  44. List<Object> tmp = CustomFunction.obj2ListNe(left);
  45. if (tmp.size() == 0) {
  46. return null;
  47. }
  48. if(tmp.size() == 1){
  49. if(StringUtils.isNumber(tmp.get(0).toString())){
  50. left = Double.valueOf(tmp.get(0).toString());
  51. }else{
  52. left = tmp.get(0);
  53. }
  54. }else{
  55. left = sum(tmp);
  56. }
  57. }
  58. if (right instanceof List) {
  59. List<Object> tmp = CustomFunction.obj2ListNe(right);
  60. if (tmp.size() == 0) {
  61. return null;
  62. }
  63. if(tmp.size() == 1){
  64. if(StringUtils.isNumber(tmp.get(0).toString())){
  65. right = Double.valueOf(tmp.get(0).toString());
  66. }else{
  67. right = tmp.get(0);
  68. }
  69. }else{
  70. right = sum(tmp);
  71. }
  72. }
  73. if (StringUtils.isNotEmpty(left) && StringUtils.isNotEmpty(right)) {
  74. if (letterNumber) {
  75. left = isLetterNumber(left);
  76. right = isLetterNumber(right);
  77. }
  78. return new Object[]{left, right};
  79. }
  80. }
  81. return null;
  82. }
  83. public static Object sum(List<Object> list) {
  84. if (ListUtils.isNotEmpty(list)) {
  85. return (float) list.stream().filter(StringUtils::isNumber).map(StringUtils::handleNull).mapToDouble(Double::parseDouble).sum();
  86. }
  87. return 0;
  88. }
  89. public static Object isLetterNumber(Object str){
  90. // 检查是否是字母数字组合(必须同时包含字母和数字,且只包含字母数字)
  91. if (str != null && str.toString().matches("^(?=.*[a-zA-Z])(?=.*\\d)[a-zA-Z\\d]+$")) {
  92. // 提取所有数字
  93. return Double.valueOf(str.toString().replaceAll("[^0-9]", ""));
  94. }
  95. return str;
  96. }
  97. }