zoukankan      html  css  js  c++  java
  • guava

    package com.bjsxt.others.guava;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    import com.google.common.collect.ImmutableList;
    
    /**
     * 只读设置
     * @author Administrator
     *
     */
    public class Demo01 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            List<String> list =new ArrayList<String>();
            list.add("a");
            list.add("b");
            list.add("c");
            //对原有的list进行包装,相等于原有List的一个视图,快照,不够安全
            List<String> readList =Collections.unmodifiableList(list);
            //java.lang.UnsupportedOperationException
            //readList.add("d");
            list.add("d"); //改变原有List 视图也一起改变
            
            //对比 查看 初始化List guava对只读设置 安全可靠,并且相对简单
            List<String> immutableList =ImmutableList.of("a", "b", "c"); 
            immutableList.add("d");//java.lang.UnsupportedOperationException
            
        }
    
    }
    package com.bjsxt.others.guava;
    
    import java.text.SimpleDateFormat;
    import java.util.Collection;
    import java.util.List;
    import java.util.Set;
    
    import com.google.common.base.Function;
    import com.google.common.base.Functions;
    import com.google.common.base.Predicate;
    import com.google.common.collect.Collections2;
    import com.google.common.collect.Lists;
    import com.google.common.collect.Sets;
    
    /**
     * 函数式编程 :解耦
     * 1、Predicate 
     * 2、Function
     * 
     * 工具:Collections2.filter() 过滤器
     * Collections2.transfer() 转换
     * Functions.compose()组合式函数编程
     * @author Administrator
     *
     */
    public class Demo02 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            //组合式函数编程
            //确保容器中的字符串长度不超过5,超过进行截取,后全部大写
            List<String> list =Lists.newArrayList("bjsxt","good","happiness");
            //确保容器中的字符串长度不超过5,超过进行截取
            Function<String,String> f1 =new Function<String,String>(){
    
                @Override
                public String apply(String input) {
                    return input.length()>5?input.substring(0,5):input;
                }
                
            };
            //转成大写
            Function<String,String> f2 =new Function<String,String>(){
    
                @Override
                public String apply(String input) {
                    return input.toUpperCase();
                }
                
            };
            
            //String =f2(f1(String))
            Function<String,String> f =Functions.compose(f1, f2);
            Collection<String> resultCol =Collections2.transform(list, f);
            
            for(String temp:resultCol){
                System.out.println(temp);
            }
            
            
        }
        /**
         * 转换
         */
        public static void test2(){
            //类型转换
            Set<Long> timeSet =Sets.newHashSet();
            timeSet.add(10000000L);
            timeSet.add(99999999999999999L);
            timeSet.add(2000000000L);
            
            Collection<String> timeStrCol =Collections2.transform(timeSet, new Function<Long,String>(){
    
                @Override
                public String apply(Long input) {
                    return new SimpleDateFormat("yyyy-MM-dd").format(input);
                }});
        
            for(String temp:timeStrCol){
                System.out.println(temp);
            }
    
        }
        /**
         * 过滤器
         */
        public static void test1(){
            //创建List 静态初始化
            List<String> list =Lists.newArrayList("moom","son","dad","bjsxt","refer");
            //找出回文 palindrome  backwords  mirror words
            //匿名内部类对象: 匿名内部类,同时创建类对象
            Collection<String> palindromeList =Collections2.filter(list, new Predicate<String>(){
        
                @Override
                public boolean apply(String input) {
                    //业务逻辑
                    return new StringBuilder(input).reverse().toString().equals(input);
                }
                
            });
            
            for(String temp:palindromeList){
                System.out.println(temp);
            }
        }
        
    }

    package com.bjsxt.others.guava;
    
    import java.util.Set;
    
    
    import com.google.common.base.Preconditions;
    import com.google.common.collect.Constraint;
    import com.google.common.collect.Constraints;
    import com.google.common.collect.Sets;
    
    /**
     * 加入约束条件:非空、长度验证
     * Constraint
     * Preconditions
     * Constraints
     * @author Administrator
     *
     */
    public class Demo03 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            Set<String> sets =Sets.newHashSet();
            //创建约束
            Constraint<String> constraint =new Constraint<String>(){
    
                @Override
                public String checkElement(String element) {
                    //非空验证
                    Preconditions.checkNotNull(element);
                    //长度验证 5-20为字符串
                    Preconditions.checkArgument(element.length()>=5 && element.length()<=20);
                                    
                    return element;
                }
                
            };
            
            Set<String> cs =Constraints.constrainedSet(sets, constraint);
            //cs.add(null); //java.lang.NullPointerException
        //    cs.add("good"); //java.lang.IllegalArgumentException
            cs.add("bjsxt");
            
            for(String str:cs){
                System.out.println(str);
            }
                    
            
        }
    
    }

    package com.bjsxt.others.guava;
    
    import java.util.Set;
    
    import com.google.common.collect.Sets;
    import com.google.common.collect.Sets.SetView;
    
    /**
     * 集合的操作:交集、差集、并集
     * Sets.intersection()
     * Sets.difference()
     * Sets.union();
     * @author Administrator
     *
     */
    public class Demo04 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            Set<Integer> sets =Sets.newHashSet(1,2,3,4,5,6);
            Set<Integer> sets2 =Sets.newHashSet(3,4,5,6,7,8,9);
            
            //交集
            System.out.println("交集为:");
            SetView<Integer> intersection =Sets.intersection(sets, sets2);
            for(Integer temp:intersection){
                System.out.println(temp);
            }
            //差集
            System.out.println("差集为:");
            SetView<Integer> diff =Sets.difference(sets, sets2);
            for(Integer temp:diff){
                System.out.println(temp);
            }
            //并集
            System.out.println("并集为:");
            SetView<Integer> union =Sets.union(sets, sets2);
            for(Integer temp:union){
                System.out.println(temp);
            }
            
        }
    
    }
    package com.bjsxt.others.guava;
    
    import com.google.common.collect.BiMap;
    import com.google.common.collect.HashBiMap;
    
    /**
     * HashMap 键唯一,值可以重复
     * BiMap:双向Map(Bidirectional Map ) 键与值都不能重复(unique -valued map)
     * @author Administrator
     *
     */
    public class Demo07 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            BiMap<String,String> bimap=HashBiMap.create();
            bimap.put("bjsxt", "bjsxt@sina.com");
            bimap.put("good","good@qq.com");
            //通过邮箱找用户
            String user =bimap.inverse().get("good@qq.com");
            System.out.println(user);
            System.out.println(bimap.inverse().inverse()==bimap);
            
        }
    
    }
    package com.bjsxt.others.guava;
    
    import java.util.Map;
    import java.util.Set;
    
    import com.google.common.collect.HashBasedTable;
    import com.google.common.collect.Table;
    import com.google.common.collect.Table.Cell;
    import com.google.common.collect.Tables;
    
    /**
     * 双键的Map -->Table -->rowKey+columnKey+value
     * 1、方法
     *  所有的行数据:cellSet()
     *  所有的学生: rowKeySet()
     *  所有的课程:columnKeySet()
     *  所有的成绩: values()
     *  学生对应的课程: rowMap() +get(学生)
     *                  row(学生)
     *  课程对应的学生: columnMap +get(课程)
     *                  column(课程)
     * @author Administrator
     *
     */
    public class Demo08 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            Table<String,String,Integer> tables=HashBasedTable.create();
            //测试数据
            tables.put("a", "javase", 80);
            tables.put("b", "javase", 90);
            tables.put("a", "oracle", 100);
            tables.put("c", "oracle", 95);
            
            //所有的行数据
            Set<Cell<String,String,Integer>> cells =tables.cellSet();
            for(Cell<String,String,Integer> temp:cells){
                System.out.println(temp.getRowKey()+"-->"+temp.getColumnKey()+"-->"+temp.getValue());
            }
            
            System.out.println("==========学生查看成绩==============");
            System.out.print("学生	");
            //所有的课程
            Set<String> cours =tables.columnKeySet();
            for(String t:cours){
                System.out.print(t+"	");
            }
            System.out.println();
            //所有的学生
            Set<String> stus =tables.rowKeySet();
            for(String stu:stus){
                System.out.print(stu+"	");
                Map<String,Integer> scores =tables.row(stu);
                for(String c:cours){
                    System.out.print(scores.get(c)+"	");
                }
                System.out.println();
            }
            
            System.out.println("==========课程查看成绩==============");
            System.out.print("课程	");
            //所有的学生
            Set<String> stuSet =tables.rowKeySet();
            for(String t:stuSet){
                System.out.print(t+"	");
            }
            System.out.println();
            //所有的课程
            Set<String> courSet =tables.columnKeySet();
            for(String c:courSet){
                System.out.print(c+"	");
                Map<String,Integer> scores =tables.column(c);
                for(String s:stuSet){
                    System.out.print(scores.get(s)+"	");
                }
                System.out.println();
            }
            System.out.println("===========转换===========");
            Table<String,String,Integer> tables2 =Tables.transpose(tables);
            //所有的行数据
            Set<Cell<String,String,Integer>> cells2 =tables2.cellSet();
            for(Cell<String,String,Integer> temp:cells2){
                System.out.println(temp.getRowKey()+"-->"+temp.getColumnKey()+"-->"+temp.getValue());
            }
            
        }
    
    }
  • 相关阅读:
    无法通过给定的扩展名确定设备类型
    biuld example_osgviewerGLUT遇到的error Link2019
    OpenGL渲染流水线
    设计模式总目录
    删除thumbs.db是提示正在使用
    COM技术内幕第十章笔记EXE中的服务器
    在高低版本之间互导max文件,以fbx格式为载体尤佳。
    参数值传递的本质
    VS 为什么要检查行尾的一致性?
    vs2005中的GL文件
  • 原文地址:https://www.cnblogs.com/sunhan/p/4003977.html
Copyright © 2011-2022 走看看