Transformer-view java实体 转换视图 Lists.transform

自: https://blog.csdn.net/mnmlist/article/details/53870520

meta_ws 连接: https://github.com/kse-music/demo/blob/064663ac7251285745dc915dad4a6837f723538f/src/test/java/com/hiekn/demo/test/util/GuavaTest.java

import com.google.common.base.Function;
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.*;
import com.google.common.collect.Table.Cell;
import com.google.common.eventbus.AllowConcurrentEvents;
import com.google.common.eventbus.AsyncEventBus;
import com.google.common.eventbus.Subscribe;
//import com.google.common.graph.*;
//import com.hiekn.demo.test.TestBase;
import org.junit.Test;

import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;

public class dd {
    public static void main(String[] args) {

        List<PersonDb> personDbs = Lists.newArrayList(
                new PersonDb("a1", 10),
                new PersonDb("a2", 20),
                new PersonDb("a3", 30)
        );
        //返回的列表是原有列表的一个转换视图,对原有集合的修改当然会反映到新集合中,transform是单向的,无法向结果列表中添加新元素
        List<PersonVo> personVos = Lists.transform(personDbs, new Function<PersonDb, PersonVo>() {
            @Override
            public PersonVo apply(PersonDb personDb) {
                return viewTransformer(personDb);
            }
        });
        for(PersonDb personDb : personDbs) {
            personDb.setMsg("dbs修改!");
        }
//        Collections.shuffle(personVos);//随机打乱原来的顺序,和洗牌一样
//        personVos = ImmutableList.copyOf(personVos);
        personVos = Lists.newArrayList(personVos);
        //我认为直接循环遍历、转换生成resultList在时间和空间复杂度上会更好。

        for(PersonVo personVo : personVos) {
            personVo.setMsg("Vos修改!");
        }

//        personVos.add(viewTransformer(new PersonDb("a5", 50)));
        personVos.forEach(s -> System.out.println("--2-> "+s));

    }

    public static PersonVo viewTransformer(PersonDb personDb) {
        Preconditions.checkNotNull(personDb, "[PersonDbToVo]personDb为null");
        PersonVo personVo = new PersonVo();
        personVo.setName(personDb.getName() + ",from Db");
        personVo.setAge(personDb.getAge());
        personVo.setMsg(personDb.getMsg());
        return personVo;
    }

    static class PersonDb {
        private String name;
        private int age;
        private String msg;
        public PersonDb(String name, int age){
            this.name = name;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }
        @Override
        public String toString() {
            return MoreObjects.toStringHelper(this)
                    .add("name", name)
                    .add("age", age)
                    .add("msg", msg).toString();
        }
    }
    static class PersonVo {
        private String name;
        private int age;
        private String msg;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }

        @Override
        public String toString() {
            return MoreObjects.toStringHelper(this)
                    .add("name", name)
                    .add("age", age)
                    .add("msg", msg).toString();
        }
    }

}

原文地址:https://www.cnblogs.com/hahajava/p/9653104.html

时间: 2024-10-16 00:10:48

Transformer-view java实体 转换视图 Lists.transform的相关文章

利用JAXB实现java实体类和xml互相转换

1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同理).map.Teacher.Date 类型的属性 package jaxb; import java.util.Date; import java.util.List; import java.util.Map; import javax.xml.bind.annotation.XmlAccess

java 实体对象与Map之间的转换工具类(自己还没看)

java实体对象与Map之间的转换工具类 import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; public class EntityUtils { /** * 实体类转Map * @param object * @return */ public static Map<String, Object> entityToMap(Object object) { Map<String,

Guava Lists.transform踩坑小记&lt;转&gt;

1.问题提出 1.前段时间在项目中用到Lists.transform返回的List,在对该list修改后发现修改并没有反映在结果里,研究源码后发现问题还挺大.下面通过单步调试的结果来查看Guava Lists.transform使用过程中需要注意的地方. a.对原有的list列表修改会影响Lists.transform已经生成列表 由上图可以看出,对原数据集personDbs的修改会直接影响到Lists.transform方法返回的结果personVos,这是很危险的,如果在使用的过程中不注意的

ABAP表生成Java实体Bean

项目中需要将HR模块中的表数据同步到Java系统中,向外围系统提供数据服务,涉及到的表有两百多张,字段好几千上万个,如果手工一张张这些ABAP表在Java系统数据库中创建一遍的话,工作量将非常大,而且容易出错.   该ABAP代码就是将需要的表转换成Java中的实体Bean,然后就可以使用Hibernate之类的持久化框架来自动生成表了. ABAP代码没有重构过,写得有点乱......将就着看吧 REPORT  ytab2javabean.DATA: p_table TYPE string. S

在线数据库表(sql语句)生成java实体类工具

相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石. 在现代项目开发中,出现了许多ORM框架,通过简单的实体映射,即可实现与数据库的交互,然而我们最初设计的一定是数据库表结构,而不是实体类.实体类仅仅是对底层数据结构的有损压缩,它仅仅是数据载体,不具备数据归档能力. 因此,很多时候,我们需要将原始的SQL建表语句转换成java实体类,这项工作看似简单,但若人工完成,工作量也是相当可观的,而且难免会出现差错. 到目前为止,笔者还没有发现比较靠谱的此类

Oracle实体化视图

1.减轻网络负担:通过MV将数据从一个数据库分发到多个不同的数据库上,通过对多个数据库访问来减轻对单个数据库的网络负担. 2.搭建分发环境:通过从一个中央数据库将数据分发到多个节点数据库,达到分发数据的目的. 3.复制数据子集:MV可以进行行级/列级的筛选,这样可以复制需要的那一部分数据. create materialized view [view_name] {TABLESPACE (表空间名)}              --保存表空间 {BUILD [DEFERRED|IMMEDIATE

云计算设计模式(十四)——实体化视图模式

云计算设计模式(十四)——实体化视图模式 产生过在一个或多个数据存储中的数据预填充的观点时,数据被格式化以不利于所需的查询操作的一种方式.这种模式可以帮助支持高效的查询和提取数据,并提高应用程序的性能. 背景和问题 何时存储数据时,优先级为开发者和数据管理员经常集中在如何将数据存储,而不是它是如何读出.所选择的存储格式通常是密切相关的数据,用于管理数据的大小和数据的完整性,并且在使用的那种存储的要求的格式.例如,使用的NoSQL文献商店时,该数据通常被表示为一系列的聚集体,其每一个包含了所有的信

在线数据库表(sql语句)生成java实体类工具 - 参考手册

SQL建表语句 说明 格式良好的SQL建表语句,可以是直接从PowerDesigner.Navicat等工具中导出SQL建表语句.所谓格式良好,是指建表指令与表名必须在一行,字段名称.类型.注释必须在一行,因为这个工具是用正则实现的,并不是语法解析器,当然,以后有时间的话,会改进成解析器. 举例 -- ---------------------------- -- Table structure for t_activity -- ---------------------------- DRO

XStream 用法详解 XML 转换为 java 实体类

XStream 用法详解 java 类与 XML 互换 现在 WEB数据交换的时代,传送XML目前是一个比较流行的方式,具有统一的规则约束,为实现后台接口提供了一个很方便的实现. 我编写了一个 接收XML并转换成所需要的Object类的 小例子,希望能够对做互联网数据传输.接口调用的朋友有所帮助. 首先要导入jar包xstream-1.4.3-sources.jar 和 xmlpull-1.1.3.1.jar 两个包: 其次是预备一个 XML 事例 <config> <span styl