zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    
    }
  • 相关阅读:
    iOS类似QQ好友展开和合并列表的实现代码
    UIPickerView常见属性、常见方法(包括代理方法和数据源方法)的一些说明
    xcode 最近打开文件列表显示为空或不显示最近打开的项目或(no recent projects)解决办法
    KSImageNamed-Xcode插件在xcode 6.4/6.3或其他版本中不能使用解决方案
    喜欢的一句话
    progressdialog的setProgress没反应
    android gradle升级(手动|速度快些)
    详解java继承
    (转)详解Android中AsyncTask的使用
    android selector的item属性
  • 原文地址:https://www.cnblogs.com/hahajava/p/9653104.html
Copyright © 2011-2022 走看看