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 { }