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 oldList = Arrays.asList( new Dog(1, "花花", "hh"), new Dog(2, "旺财", "wc") ); Collection newList = Arrays.asList( new Dog(null, "花花2", "hh"), new Dog(null, "小白", "xb") ); BiFunction sameFunc = (oldObj, newObj) -> { boolean same = oldObj.getCode().equals(newObj.getCode()); // 如果相等的情况下,需要设置下 id,后续好更新 if (same) { newObj.setId(oldObj.getId()); } return same; }; // 调用 List> 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")); } }