Guava库使用

今天听同事说到google的Java工具库Guava非常好用,有很多操作list和map的快捷方法。所以就来学习记录一下。

  • Joiner

静态初始化方法,创建list时指定初始值

List<String> list1 = Lists.newArrayList("1", "2", "3");
 //传入集合
List<String> list2 = Lists.newArrayList(list1);

将list字符串集合,以,形式转为字符串

List<String> list =new ArrayList<String>();
list.add("xx");
list.add("zz");
list.add("dd");

//Joiner.on(",")获得Joiner实例对象
String joiner =  Joiner.on(",").join(list);
//输出结果:xx,zz,dd

跳过null值连接

 list.add(null);
 list.add("小小");
 //skipNulls()代表去除null
 String str3=Joiner.on(",").skipNulls().join(list);
 System.out.println(str3);
 //输出:xx,zz,dd,小小
 
//替换null值进行连接
String str4=Joiner.on(",").useForNull("空").join(list);
System.out.println(str4);
//输出:xx,zz,dd,空,小小

Map的键值对打印出来

   Map<String, String> map = new HashMap<>();
   map.put("key1", "value1");
   map.put("key2", "value2");
   map.put("key3", "value3");
   Joiner.MapJoiner mapJoiner = Joiner.on(",").withKeyValueSeparator("=");
   System.out.println(mapJoiner.join(map));
   //输出:key1=value1,key2=value2,key3=value3  
  • Splitter

1、拆分字符串为List集合

String str="小小,妈妈,爸爸,爷爷,奶奶";
Splitter splitter =Splitter.on(",");
List<String> list=splitter.splitToList(str);
System.out.println(list);
//输出:[小小, 妈妈, 爸爸, 爷爷, 奶奶]

2、忽略空字符

String str1="a,b,c,d,,f,g";
//omitEmptyStrings()代表去除空字符串
List<String> list1=Splitter.on(",").omitEmptyStrings().splitToList(str1);
System.out.println(list1);
//输出:[a, b, c, d, f, g]

3、忽略空字符且去除字符串前后空格

String str2="a,b,c,d,,f,  g  ";
List<String> list2=Splitter.on(",").omitEmptyStrings().trimResults().splitToList(str2);
System.out.println(list2);
//输出:[a, b, c, d, f, g]
  • Strings

//1、补右全(Strings.padEnd方法)

String a="12345";
String b=Strings.padEnd(a, 10, 'x');
System.out.println(b);
//输出:12345xxxxx

//2、补左全(Strings.padStart)

String c=Strings.padStart(a, 10, 'x');
System.out.println(c);
//输出:xxxxx12345

//6、重复字符串(Strings.repeat)

String o="123";
String p=Strings.repeat(o, 3);
System.out.println(p);
//输出:123123123

//7、获取a,b左公共部分字符串(左边第一个公共部分)

String r="abcdsfsfs";
String s="accdc3sfsd";
String t=Strings.commonPrefix(r, s);
System.out.println(t);
//输出:a

//8、获取a,b右公共部分字符串

String w="faaxyz";
String x="fwefxyz";
String z=Strings.commonSuffix(w, x);
System.out.println(z);
//输出:xyz
  • Multimap:一对多Map

前段时间写业务的时候刚好遇到,一个二级分类要对应好几个三级分类信息。
采用的方法的是map<string,List>,这样会使代码变得冗长,而且每个object都要判断List存不存在,不存在需要new一个。
有了Multimap后就可以直接用。例子如下:

 Multimap<String,String> multimap = ArrayListMultimap.create();

 multimap.put("lower", "a");
 multimap.put("lower", "b");
 multimap.put("lower", "c");
 
List<String> lowerList = (List<String>)multimap.get("lower");
  • 双向查找的Map:BiMap

业务场景:必然从用户名查email,反过来又想通过email查用户名。
使用方法:

        HashBiMap<String,String> upperToLower = HashBiMap.create();
        upperToLower.put("A","a");
        upperToLower.put("B","b");
        upperToLower.put("C","c");
        //upperToLower.put("D","d");会丢出IllegalArgumentException, 需要用forceput
        upperToLower.forcePut("D","c");

        //用key获取value
        System.out.println(upperToLower.get("D"));  //c

        //用value获取key
        BiMap<String, String> lowerToUpper = upperToLower.inverse();
        System.out.println(lowerToUpper.get("c"));  //D

        //获取Collection视图
        Set<String> valuesSet = lowerToUpper.values();

        //将map放入BiMap中
        Map<String, String> map = new HashMap<>();
        map.put("A","x");
//        map.put("B","x");   //报错IllegalArgumentException
        upperToLower.putAll(map);   // 并不会重复,但会覆盖,map中value值不能重复
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值