|
@@ -0,0 +1,59 @@
|
|
|
|
+package com.winhc.bigdata.udf;
|
|
|
|
+
|
|
|
|
+import com.aliyun.odps.udf.UDF;
|
|
|
|
+import com.google.common.collect.Lists;
|
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
|
+import org.apache.commons.lang.math.NumberUtils;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+import java.util.Arrays;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @author ZhangJi
|
|
|
|
+ * @since 2021-08-27 10:45
|
|
|
|
+ */
|
|
|
|
+public class ToIntervalSalary extends UDF {
|
|
|
|
+ private static final List<Integer> MIAN_YI = Lists.newArrayList(null, null);
|
|
|
|
+ private static final Pattern p = Pattern.compile("[^0-9-]");
|
|
|
|
+
|
|
|
|
+ public List<Integer> evaluate(String salary) {
|
|
|
|
+ if (StringUtils.isEmpty(salary)) {
|
|
|
|
+ return MIAN_YI;
|
|
|
|
+ }
|
|
|
|
+ boolean returnSmall = false;
|
|
|
|
+ boolean returnBig = false;
|
|
|
|
+ if (salary.contains("以上")) {
|
|
|
|
+ returnSmall = true;
|
|
|
|
+ }
|
|
|
|
+ if (salary.contains("以下")) {
|
|
|
|
+ returnBig = true;
|
|
|
|
+ }
|
|
|
|
+ int factor = 1;
|
|
|
|
+ if (salary.contains("万")) {
|
|
|
|
+ factor = 10000;
|
|
|
|
+ }
|
|
|
|
+ salary = p.matcher(salary).replaceAll("");
|
|
|
|
+ int f = factor;
|
|
|
|
+ int[] ints = Arrays.stream(salary.split("-")).filter(NumberUtils::isNumber).mapToInt(Integer::valueOf).map(i -> i * f).toArray();
|
|
|
|
+ if (ints.length == 0) {
|
|
|
|
+ return MIAN_YI;
|
|
|
|
+ } else if (ints.length == 1) {
|
|
|
|
+ if (returnSmall) {
|
|
|
|
+ return Lists.newArrayList(ints[0], null);
|
|
|
|
+ } else if (returnBig) {
|
|
|
|
+ return Lists.newArrayList(null, ints[0]);
|
|
|
|
+ }
|
|
|
|
+ return Lists.newArrayList(ints[0], ints[0]);
|
|
|
|
+ } else if (ints.length == 2) {
|
|
|
|
+ return Lists.newArrayList(ints[0], ints[1]);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return MIAN_YI;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
+ System.out.println(new ToIntervalSalary().evaluate("5000-8000\n"));
|
|
|
|
+ }
|
|
|
|
+}
|