From 2063cb2453f8976e4c9615c5816491248d782886 Mon Sep 17 00:00:00 2001 From: wangzhen Date: Mon, 10 May 2021 14:27:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=8D=E5=88=B6=E9=9B=86?= =?UTF-8?q?=E5=90=88=E4=B8=AD=E7=9A=84Bean=E5=B1=9E=E6=80=A7=E6=96=B9?= =?UTF-8?q?=E6=B3=95,=E5=AF=B9=E6=AF=94=E5=8E=9F=E6=96=B9=E6=B3=95(copyToL?= =?UTF-8?q?ist)=E5=87=8F=E5=B0=91=E4=B8=8D=E5=B8=B8=E7=94=A8=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/bean/BeanUtil.java | 17 +++++++++++ .../cn/hutool/core/bean/BeanUtilTest.java | 28 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java b/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java index db5d4e67b..f1fc29689 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/BeanUtil.java @@ -734,6 +734,23 @@ public class BeanUtil { }).collect(Collectors.toList()); } + /** + * 复制集合中的Bean属性
+ * 此方法遍历集合中每个Bean,复制其属性后加入一个新的{@link List}中。 + * + * @param collection 原Bean集合 + * @param targetType 目标Bean类型 + * @param Bean类型 + * @return 复制后的List + */ + public static List copyToList(Collection collection, Class targetType){ + return collection.stream().map((source)->{ + final T target = ReflectUtil.newInstanceIfPossible(targetType); + copyProperties(source, target); + return target; + }).collect(Collectors.toList()); + } + /** * 给定的Bean的类名是否匹配指定类名字符串
* 如果isSimple为{@code false},则只匹配类名而忽略包名,例如:cn.hutool.TestEntity只匹配TestEntity
diff --git a/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java index 2c3621871..0a7a10507 100644 --- a/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/bean/BeanUtilTest.java @@ -4,8 +4,10 @@ import cn.hutool.core.annotation.Alias; import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.ValueProvider; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import lombok.Data; import lombok.Getter; @@ -501,6 +503,12 @@ public class BeanUtilTest { Assert.assertEquals("{codeList={0={name=张三}}}", resultMap.toString()); } + @Data + public static class Student{ + String name; + int age; + Long no; + } @Test public void beanCopyTest() { final Station station = new Station(); @@ -512,6 +520,26 @@ public class BeanUtilTest { Assert.assertEquals(new Long(123456L), station2.getId()); } + @Test + public void copyListTest(){ + + Student student = ReflectUtil.newInstance(Student.class); + student.setName("张三"); + student.setAge(123); + student.setNo(3158L); + Student student2 = ReflectUtil.newInstance(Student.class); + student.setName("李四"); + student.setAge(125); + student.setNo(8848L); + List studentList = ListUtil.of(student, student2); + List people = BeanUtil.copyToList(studentList, Person.class); + Assert.assertEquals(studentList.size(),people.size()); + for (int i = 0; i < studentList.size(); i++) { + Assert.assertEquals(studentList.get(i).getName(),people.get(i).getName()); + Assert.assertEquals(studentList.get(i).getAge(),people.get(i).getAge()); + } + + } public static class Station extends Tree { }