使用Google Guava工具类

package com.teriste.guava;

import com.alibaba.fastjson.JSON;
import com.google.common.base.CharMatcher;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.*;
import com.google.common.primitives.Ints;

import java.util.*;

/**
 * 使用Google Guava工具类
 */
public class GuavaAction {

    /**
     * guava连接器
     * 跳过null
     */
    private static final Joiner joinerSkipNull = Joiner.on(",").skipNulls();

    /**
     * guava连接器
     * 替换null
     */
    private static final Joiner joinerUseNull = Joiner.on(",").useForNull("empty");

    /**
     * guava分割器
     */
    private static final Splitter splitter = Splitter.on(",").omitEmptyStrings();

    /**
     * 字符匹配
     */
    private static final CharMatcher matchAny = CharMatcher.any();

    /**
     * 将list连接成字符串
     * @param sourceList
     * @return
     */
    public static String joinList2String(List<String> sourceList){
        String target = joinerSkipNull.join(sourceList.toArray());
        System.out.println("after join list skip null:"+target); //after join list skip null:a,b,c,null,d
        target = joinerUseNull.join(sourceList.toArray());
        System.out.println("after join list user null:"+target); //after join list user null:a,b,c,null,empty,d
        return target;
    }

    /**
     * 将字符串分割成list
     * @param sourceString
    * @return
     */
    public static List<String> splitString2List(String sourceString){
        List<String> target = splitter.splitToList(sourceString);
        System.out.println("after split string:"+ JSON.toJSONString(target)); //after split string:["a","b","c"," ","null","d"]
        return target;
    }

    /**
     * 使用Ints扩展原生类型的功能
     * 比如避免循环操作int数组
     */
    public static void extendType(){
        //将基本类型变量转换为数组
        List<Integer> ints= Ints.asList(1,3,4,3,5,7,7,6,8);
        int [] intArr=Ints.toArray(ints);
        System.out.println("int数组是否包含数字10:"+Ints.contains(intArr,6)); //int数组是否包含数字10:true
        System.out.println("join list:"+Ints.join(",",1,3,5,6,8)); //join list:1,3,5,6,8
        System.out.println("数字3在数组中的位置(第一次出现):"+Ints.indexOf(intArr,3)); //数字3在数组中的位置:1
        System.out.println("数字3在数组中最后一次出现的位置:"+Ints.lastIndexOf(intArr,3)); //数字3在数组中最后一次出现的位置:3
        System.out.println("数组中的最小值:"+Ints.min(intArr)+",数组中的最大值:"+Ints.max(intArr)); //数组中的最小值:1,数组中的最大值:8
    }

    /**
     * 使用MultiSet实现无序且可以重复的集合
     * List:有序且可以重复的集合
     * Set:无序且不可以重复的集合
     */
    public static void useMultiSet(){
        List<String> list=Arrays.asList("a","b","c","b","d","c","c");
        //创建HashMultiset对象
        Multiset<String> multiset = HashMultiset.create();
        multiset.add("a");
        multiset.add("a");
        multiset.add("c");
        multiset.add("b");
        multiset.add("c");
        System.out.println("multiset element:"+multiset.toString()); //multiset element:[a x 2, b, c x 2]
        multiset.forEach((x)-> System.out.print(x+"\t")); //a	a	b	c	c
        System.out.println();
    }

    /**
     * Collections Immutable与Guava
     */
    public static void immutaList(){
        List<String> list=new ArrayList<>();
        list.add("a");
        list.add("b");
        List<String> unmodifyList= Collections.unmodifiableList(list);
        //immutaList.add("xx");//java.lang.UnsupportedOperationException
        //修改源集合的值,不可变集合的值也被修改了,说明它们引用的是同一个集合
        //因此Collections.unmodifiableList()不能确保集合不可变
        list.add("zz");
        System.out.println("unmodifyList:"+JSON.toJSONString(unmodifyList)); //["a","b","zz"]
        //如果想要确保集合不可变,只能通过Arrays.asList()来实现
        List<String> list2= Arrays.asList("a","b","c","null",null,"d");
        //list2.add("yy"); //java.lang.UnsupportedOperationException
        System.out.println("list2:"+JSON.toJSONString(list2));
        System.out.println("#########################");
        //Guava ImmutableList
        List<String> immutableList = ImmutableList.of("a","b","c");
        //immutableList.add("s"); //java.lang.UnsupportedOperationException
        System.out.println("immutableList:"+JSON.toJSONString(immutableList));
    }

    /**
     * 使用Guava MultiMap代替Map<String,List<T>
     */
    public static void useMultiMap(){
        //创建Multimap
        Multimap<String,String> multimap = HashMultimap.create();
        multimap.put("11","aa");
        multimap.put("11","bb");
        //重复元素会覆盖,value是Set
        multimap.put("11","aa");
        multimap.put("11","cc");
        //获取multiMap中key对应的Collection
        System.out.println("map value:"+multimap.get("11")); //map value:[aa, bb, cc]
        //删除multiMap中key对应Collection中的指定值
        multimap.remove("11","bb");
        System.out.println("map value:"+multimap.get("11")); //map value:[aa, cc]
        //判断某个值在map的key对应的Collection中是否存在,底层实际上还是iterator遍历
        System.out.println("map value is contains aa:"+multimap.containsValue("aa"));
    }

    /**
     * key与value一对一的map
     */
    public static void useBiMap(){
        //BiMap内部维护了两个map,分别是键值相反的map
        BiMap<String,String> biMap = HashBiMap.create();
        biMap.put("zhangsan","11@email.com");
        //如果键已存在就无法put
        //biMap.put("zhangsan","22@email.com");//java.lang.IllegalArgumentException: value already present: 22@email.com
        //可以强制put,会更新键值
        biMap.forcePut("zhangsan","22@email.com");
        //如果值已存在就无法put
        //biMap.put("lisi","22@email.com"); //java.lang.IllegalArgumentException: value already present: 22@email.com
        biMap.put("lisi","33@email.com");
        System.out.println("biMap:"+JSON.toJSONString(biMap)); //biMap:{"zhangsan":"22@email.com","lisi":"33@email.com"}
        //通过值查询键
        System.out.println("22@email.com对应的key:"+biMap.inverse().get("22@email.com")); //22@email.com对应的key:zhangsan
    }

    /**
     * 使用Table来表示数据库表
     * 对应关系是某行、某列的值
     * row,column,value
     */
    public static void useTable(){
        //定义一个学生表,行是年级,列是班级,姓名,学科,成绩
        Table<String,String,String> students=HashBasedTable.create();
        students.put("王二","数学","90");
        students.put("王二","英语","95");
        students.put("王二","语文","80");
        students.put("张三","数学","88");
        students.put("张三","英语","85");
        students.put("张三","语文","90");
        Set<Table.Cell<String,String,String>> set = students.cellSet();
        for (Table.Cell cell:set){
            System.out.println(cell.getRowKey()+","+cell.getColumnKey()+","+cell.getValue());
        }
    }

    public static void main(String[] args) {
        List<String> sourceList= Arrays.asList("a","b","c","null",null,"d");
        //1.将list中的元素通过分隔符连接
        joinList2String(sourceList);
        String source="a,b,c, ,null,d";
        //2.将字符串根据分隔符拆分成list
        splitString2List(source);
        //3.匹配字符
        String matchString = " Hello,World! ";
        System.out.println(matchAny.trimFrom(matchString));
        //4.Ints扩展基本类型功能
        extendType();
        //5.使用MultiSet实现无序且可以重复的集合
        useMultiSet();
        //6.使用Guava ImmutableList实现不可变list,类似还有不可变map
        immutaList();
        //7.使用Guava MultiMap代替Map<String,List<T>
        //大大方便了对map value的增删改查
        useMultiMap();
        //8.key与value一对一的map
        useBiMap();
        //9.
        useTable();
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值