欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 快速复制两个list

快速复制两个list

2024/12/26 20:41:10 来源:https://blog.csdn.net/FlyingJiang/article/details/143628684  浏览:    关键词:快速复制两个list

Part1 

在 Java 17 中,有几种方法可以快速复制两个列表(List)。以下是几种常用的方法:

1. 使用 new ArrayList<>(originalList)

这是最常见和最简单的方法,可以创建一个新的 ArrayList 实例,并将原始列表中的所有元素复制到新列表中。

import java.util.ArrayList;
import java.util.List;public class ListCopyExample {public static void main(String[] args) {List<String> originalList = new ArrayList<>();originalList.add("A");originalList.add("B");originalList.add("C");List<String> copiedList = new ArrayList<>(originalList);// 打印两个列表以验证它们的内容System.out.println("Original List: " + originalList);System.out.println("Copied List: " + copiedList);}
}

2. 使用 List.of 和 stream

如果你想要一个不可变的列表副本,你可以使用 List.of 创建一个不可变的视图,然后使用 stream 将其转换为可变列表(如果需要)。

import java.util.List;
import java.util.stream.Collectors;public class ListCopyExample {public static void main(String[] args) {List<String> originalList = List.of("A", "B", "C");// 创建一个新的可变列表副本List<String> copiedList = originalList.stream().collect(Collectors.toList());// 打印两个列表以验证它们的内容System.out.println("Original List: " + originalList);System.out.println("Copied List: " + copiedList);}
}

3. 使用 addAll 方法

你也可以创建一个空的 ArrayList,然后使用 addAll 方法将原始列表的元素添加到新列表中。

import java.util.ArrayList;
import java.util.List;public class ListCopyExample {public static void main(String[] args) {List<String> originalList = new ArrayList<>();originalList.add("A");originalList.add("B");originalList.add("C");List<String> copiedList = new ArrayList<>();copiedList.addAll(originalList);// 打印两个列表以验证它们的内容System.out.println("Original List: " + originalList);System.out.println("Copied List: " + copiedList);}
}

4. 使用 Collections.copy 方法(适用于固定大小的列表)

Collections.copy 方法可以将一个列表复制到另一个列表,但目标列表必须足够大以容纳原始列表的所有元素,并且其大小是固定的。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;public class ListCopyExample {public static void main(String[] args) {List<String> originalList = Arrays.asList("A", "B", "C");// 创建一个足够大的目标列表List<String> copiedList = new ArrayList<>(Collections.nCopies(originalList.size(), null));// 使用 Collections.copy 方法复制列表Collections.copy(copiedList, originalList);// 打印两个列表以验证它们的内容System.out.println("Original List: " + originalList);System.out.println("Copied List: " + copiedList);}
}

注意:Collections.copy 方法要求目标列表在调用 copy 方法时具有足够的空间(即大小等于或大于源列表的大小),否则会抛出 IndexOutOfBoundsException

总结

在大多数情况下,第一种方法(使用 new ArrayList<>(originalList))是最简单和最高效的。如果你需要处理不可变列表或特定大小的列表,其他方法可能更适合。

Part2 BeanUtil.copyToList

在Hutool工具包中,BeanUtil.copyToList 方法确实存在,并且它是用来将一个对象列表中的属性值复制到另一个类型的对象列表中的。Hutool是一个Java工具包,它提供了很多实用的工具类来简化开发。

BeanUtil.copyToList 方法通常用于将一种类型的JavaBean对象列表转换为另一种具有相同或相似属性的JavaBean对象列表。这个过程是基于属性名和类型的匹配来进行的。

以下是一个使用BeanUtil.copyToList方法的示例:

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import java.util.List;
import java.util.ArrayList;// 定义源Bean类
class SourceBean {private String name;private int age;// getters and setters
}// 定义目标Bean类
class TargetBean {private String name;private int age;// getters and setters
}public class BeanCopyExample {public static void main(String[] args) {// 创建源Bean列表List<SourceBean> sourceList = new ArrayList<>();SourceBean source1 = new SourceBean();source1.setName("Alice");source1.setAge(30);sourceList.add(source1);SourceBean source2 = new SourceBean();source2.setName("Bob");source2.setAge(25);sourceList.add(source2);// 使用Hutool的BeanUtil.copyToList方法复制属性到目标Bean列表List<TargetBean> targetList = BeanUtil.copyToList(sourceList, TargetBean.class);// 输出目标Bean列表以验证复制结果for (TargetBean target : targetList) {System.out.println("Name: " + target.getName() + ", Age: " + target.getAge());}}
}

在这个示例中,我们首先创建了一个SourceBean类型的列表,并填充了一些数据。然后,我们使用BeanUtil.copyToList方法将这个列表中的对象复制到TargetBean类型的列表中。由于SourceBeanTargetBean具有相同的属性名和类型,所以它们的属性值被正确地复制了。

需要注意的是,BeanUtil.copyToList方法要求源对象和目标对象具有相同的属性名,并且这些属性的类型必须兼容。如果属性名不匹配或类型不兼容,那么这些属性将不会被复制。

此外,Hutool的BeanUtil类还提供了其他有用的方法,如copyProperties(用于复制单个对象的属性)和toMap(用于将对象的属性转换为Map)等。这些方法都可以帮助开发者更方便地进行JavaBean对象的操作。

 

--end--

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com