java arraylist 复制_如何克隆ArrayList和复制其内容?

Java 8提供了一种新的方法来调用元素狗上的复制构造函数或克隆方法:溪流, 兰巴斯和收藏家.

复制构造函数:List clonedDogs = dogs.stream().map(Dog::new).collect(toList());

表达Dog::new称为a方法参考..它创建一个函数对象,该对象调用Dog以另一只狗为论据。

克隆方法[1]:List clonedDogs = dogs.stream().map(d -> d.clone()).collect(toList());

得到一个ArrayList结果

或者,如果你必须得到一个ArrayListBack(万一您以后想修改它):ArrayList clonedDogs = dogs.stream().map(Dog::new).collect(toCollection(ArrayList::new));

更新列表

如果不需要保留dogs列表,您可以使用replaceAll方法并更新列表:dogs.replaceAll(Dog::new);

所有的例子都假设import static java.util.stream.Collectors.*;.

收集器ArrayLists

上一个示例中的收集器可以变成util方法。既然这是一件很平常的事,我个人喜欢它又短又漂亮。就像这样:ArrayList clonedDogs = dogs.stream().map(d -> d.clone()).collect(toArrayList());public static 

Collector> toArrayList() {

return Collectors.toCollection(ArrayList::new);}

[1]关于CloneNotSupportedException:

若要使此解决方案运行在clone方法Dog 绝不能宣布它抛出CloneNotSupportedException..原因是map不允许抛出任何已检查的异常。

就像这样:// Note: Method is public and returns Dog, not Object

@Override

public Dog clone() /* Note: No throws clause here */ { ...

不过,这不应该是个大问题,因为这是最好的做法。(效果Java例如,给出这个建议。)

感谢古斯塔沃注意到这一点。

PS:

如果您发现它更漂亮,您可以使用方法引用语法来做完全相同的事情:List clonedDogs = dogs.stream().map(Dog::clone).collect(toList());

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值