Browse Source

增加对集合的支持

zhou-hao 6 years ago
parent
commit
3cf5338ff9

+ 15 - 9
hsweb-core/src/main/java/org/hswebframework/web/bean/CompareUtils.java

@@ -87,10 +87,9 @@ public abstract class CompareUtils {
         return false;
     }
 
+    @SuppressWarnings("all")
     public static boolean compare(Collection collection, Object target) {
 
-        int size = collection.size();
-
         Collection targetCollection = null;
         if (target instanceof String) {
             target = ((String) target).split("[, ;]");
@@ -103,15 +102,22 @@ public abstract class CompareUtils {
         if (targetCollection == null) {
             return false;
         }
-        if (size != targetCollection.size()) {
-            return false;
-        }
-
 
-        //[1,2,3] ,[3,3,3]
-       // return targetCollection.stream().allMatch(object -> {});
+        Set left = new HashSet(collection);
+        Set right = new HashSet(targetCollection);
 
-        return false;
+        if (left.size() < right.size()) {
+            Set tmp = right;
+            right = left;
+            left = tmp;
+        }
+        l:
+        for (Object source : left) {
+            if (!right.stream().anyMatch(targetObj -> compare(source, targetObj))) {
+                return false;
+            }
+        }
+        return true;
     }
 
     public static boolean compare(Object[] number, Object target) {

+ 4 - 2
hsweb-core/src/main/java/org/hswebframework/web/bean/diff/Diff.java

@@ -7,9 +7,11 @@ import lombok.Setter;
 @Setter
 public class Diff {
 
-    private String fieldName;
+    private String field;
 
-    private String fieldComment;
+    private String comment;
+
+    private String type;
 
     private Object before;
 

+ 9 - 0
hsweb-core/src/test/java/org/hswebframework/web/bean/CompareUtilsTest.java

@@ -8,6 +8,7 @@ import org.junit.Assert;
 import org.junit.Test;
 
 import java.math.BigDecimal;
+import java.util.Arrays;
 import java.util.Date;
 
 import static org.junit.Assert.*;
@@ -54,6 +55,14 @@ public class CompareUtilsTest {
 
         Assert.assertTrue(CompareUtils.compare(new BigDecimal("100"),100.0D));
 
+        Assert.assertTrue(CompareUtils.compare(Arrays.asList(1,2,3),Arrays.asList("3","2","1")));
+
+        Assert.assertFalse(CompareUtils.compare(Arrays.asList(1,2,3),Arrays.asList("3","3","1")));
+
+        Assert.assertFalse(CompareUtils.compare(Arrays.asList(1,2,3),Arrays.asList("3","1")));
+
+        Assert.assertTrue(CompareUtils.compare(Arrays.asList(date,3),Arrays.asList("3",DateFormatter.toString(date,"yyyy-MM-dd"))));
+
 
     }