栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

问题-Guava Lists.transform遍历完数组后数据丢失

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

问题-Guava Lists.transform遍历完数组后数据丢失

1. 现象

        在调用Guava Lists.transform进行转换 & 封装对象时,获得transform返回的数组对象后,随后进行遍历并对数组元素属性进行赋值,当遍历结束后数组对象会出现赋值丢失。

public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add(new BookA());
        List transform = Lists.transform(list, new Function() {
            @Override
            public @Nullable BookB apply(@Nullable BookA bookA) {
                BookB bookB = new BookB();
                return bookB;
            }
        });
        transform.forEach(v->{
            v.setA(1);
            v.setType(1);
        });
        System.out.println(transform);
}

Transform执行结果: 

2. 原因

        Lists.transform只是新创建了一个Guava实现了AbstractList的类,并不是返回一个转换后新数组,而我们在每次遍历transform数组时都会运行 Lists.transform中的funtion方法,因此我们在运行foreach中对数组元素进行赋值时,在会在当前循环有效。当foreach循环完毕在执行输出transform数组对象时,只会重新执行Lists.transform中的funtion方法,因而foreach中赋值操作会直接丢失。

3. 解决方案

        推荐使用JAVA Stream。

4. FAQ 5. 参考资料

【">Guava Lists.transform踩坑小记<转>】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号