dengzedong
2024-12-03 22d6c70a50235fb46bd6db500c99406b42d454e6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.iailab.framework.common.util.collection;
 
import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.jupiter.api.Test;
 
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.function.BiFunction;
 
import static org.junit.jupiter.api.Assertions.assertEquals;
 
/**
 * {@link CollectionUtils} 的单元测试
 */
public class CollectionUtilsTest {
 
    @Data
    @AllArgsConstructor
    private static class Dog {
 
        private Integer id;
        private String name;
        private String code;
 
    }
 
    @Test
    public void testDiffList() {
        // 准备参数
        Collection<Dog> oldList = Arrays.asList(
                new Dog(1, "花花", "hh"),
                new Dog(2, "旺财", "wc")
        );
        Collection<Dog> newList = Arrays.asList(
                new Dog(null, "花花2", "hh"),
                new Dog(null, "小白", "xb")
        );
        BiFunction<Dog, Dog, Boolean> sameFunc = (oldObj, newObj) -> {
            boolean same = oldObj.getCode().equals(newObj.getCode());
            // 如果相等的情况下,需要设置下 id,后续好更新
            if (same) {
                newObj.setId(oldObj.getId());
            }
            return same;
        };
 
        // 调用
        List<List<Dog>> result = CollectionUtils.diffList(oldList, newList, sameFunc);
        // 断言
        assertEquals(result.size(), 3);
        // 断言 create
        assertEquals(result.get(0).size(), 1);
        assertEquals(result.get(0).get(0), new Dog(null, "小白", "xb"));
        // 断言 update
        assertEquals(result.get(1).size(), 1);
        assertEquals(result.get(1).get(0), new Dog(1, "花花2", "hh"));
        // 断言 delete
        assertEquals(result.get(2).size(), 1);
        assertEquals(result.get(2).get(0), new Dog(2, "旺财", "wc"));
    }
 
}