Java程序员之面向Google Guava包编程

简介

Guava 是一组来自 Google 的核心 Java 库,其中包括新的集合类型(例如 multimap 和 multiset)、不可变集合、图形库以及用于并发、I/O、散列、缓存、原语、字符串等的实用程序!它广泛用于 Google 内部的大多数 Java 项目,也被许多其他公司广泛使用。

  • 需要 JDK 1.8 或更高版本。

简介

Maven依赖

常用工具类

🦆Multimap和Multiset

🦆Table

 🦆BiMap

🦆Immutable Collections(不可变集合)

🦆Joiner和Splitter 

🦆Lists和Sets


Maven依赖

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>31.1-jre</version>
</dependency>

常用工具类

🦆Multimap和Multiset

        Multimap是一个可以添加重复key的新集合类型,类似于Map<String,List<String>>的结构。

        //创建multimap
        Multimap<String, String> multimap = HashMultimap.create();
        //放入小黄鸭
        multimap.put("duck","yellow");
        //放下乌鸭
        multimap.put("duck","black");
        //取出🦆
        Collection<String> duck = multimap.get("duck");
        System.out.println(duck);//[yellow, black]
        //取个🐕
        Collection<String> dog = multimap.get("dog");
        //如果尝试取出不存在的key 则会返回一个空集合而不是null
        System.out.println(dog);//[]

        Multiset是一个可以方便的统计集合中重复元素出现的次数的新集合类型。

        //创建Multiset
        Multiset<String> multiset = HashMultiset.create();
        //放入🦆
        multiset.add("duck");
        //再放一个🦆
        multiset.add("duck");
        //放一个🐕
        multiset.add("dog");
        //看下🦆数量
        int duckCount = multiset.count("duck");
        System.out.println(duckCount);//2
        //看下🦆和🐕的数量
        int allCount = multiset.size();
        System.out.println(allCount);//3

🦆Table

        Table是一种特殊的键值对的结构集合,类似于Map<String,Map<String,String>>的结构,Table<R,C,V> = Map<R,Map<C,V>>。

        //创建table表
        Table<String,String,String> table = HashBasedTable.create();
        //添加🦆
        table.put("duck","yellow","small");
        table.put("duck","black","big");
        //添加🐕
        table.put("dog","black","small");
        table.put("dog","pink","big");

        //所有数据
        System.out.println(table.cellSet());//[(duck,yellow)=small, (duck,black)=big, (dog,black)=small, (dog,yellow)=big]
        //所有动物
        System.out.println(table.rowKeySet());//[duck, dog]
        //所有颜色
        System.out.println(table.columnKeySet());//[yellow, black, pink]
        //查看🦆的所有属性
        Map<String, String> duck = table.row("duck");
        //取出粉红色的🐕的大小
        System.out.println(table.get("dog","pink"));//big

 🦆BiMap

        BiMap可以理解为是一种双向的键值对映射,既可以通过key获取value的值,也可以通过value反向获取key的值。

        //创建BiMap
        BiMap<String,String> duckMap = HashBiMap.create();
        //放入🦆的英文和中文
        duckMap.put("duck","鸭子");
        //根据中文取出英文
        String duckEn = duckMap.inverse().get("鸭子");
        //根据英文取出中文
        String duckCn = duckMap.get("duck");
        System.out.println(duckEn);//duck
        System.out.println(duckCn);//鸭子

🦆Immutable Collections(不可变集合)

优点:

  • 当被第三方调用时,不可变集合是安全的
  • 不可变集合节省内存,不用考虑扩容,因此可以节省时间和空间,内存利用率高。
  • 不可变集合被多线程调用时,不存在竞争。
  • 可以当作常量使用
            //copyOf形式创建 黄🦆 黑🦆 粉红🦆
            ImmutableSet<String> duckList = ImmutableSet.of("yellow duck", "black duck", "pink duck");
            //Builder方式创建
            ImmutableSet<String> duckList = ImmutableSet.<String>builder()
                    .add("yellow duck")
                    .add("black duck")
                    .add("pink duck")
                    .build();

🦆Joiner和Splitter 

        Joiner是字符串连接器。

        //把集合里添加🦆,🐕,🐱并且以 | 连接
        List<String> list = Arrays.asList("duck","dog","cat");
        String res = Joiner.on("|").join(list);
        System.out.println(res);//duck|dog|cat
        //添加一个空对象
        List<String> list1 = Arrays.asList("duck","dog",null,"cat");
        //忽略集合中的null
        String skipNullStr = Joiner.on("|").skipNulls().join(list1);
        System.out.println(skipNullStr);//duck|dog|cat
        //把集合里的空对象换成一只🐖
        String useNullStr = Joiner.on("|").useForNull("pig").join(list1);
        System.out.println(useNullStr);//duck|dog|pig|cat

        Splitter是字符串分割器。

        //利用Splitter把🦆|🐕|🐱分割开来
        List<String> list = Splitter.on("|").splitToList("duck|dog|cat");
        System.out.println(list);//[duck, dog, cat]
        //按照固定长度拆分
        List<String> list1 = Splitter.fixedLength(4).splitToList("duckdog1cat1");
        System.out.println(list1);//[duck, dog1, cat1]

🦆Lists和Sets

        Lists.partion集合分割方法

        //创建一个🦆🐱🐕🐖乐园
        List<String> list = new ArrayList<>();
        list.add("duck");
        list.add("cat");
        list.add("dog");
        list.add("pig");
        //分割成两份
        List<List<String>> partition = Lists.partition(list, 2);
        System.out.println(partition);//[[duck, cat], [dog, pig]]

        Sets.intersection()交集

        Sets.difference()差集

        Sets.union()并集

        //创建两个Sets集合
        //农场:🦆 🐕 🐱
        Set<String> sets = Sets.newHashSet("duck", "dog", "cat");
        //农场:🦆 🐕 🐖
        Set<String> sets2 = Sets.newHashSet("duck", "dog","pig");
        // 交集
        Sets.SetView<String> intersection = Sets.intersection(sets, sets2);
        System.out.println(intersection);//[dog, duck]🐕🦆
        // 差集
        Sets.SetView<String> diff = Sets.difference(sets, sets2);
        Sets.SetView<String> diff1 = Sets.difference(sets2, sets);
        System.out.println(diff);//[cat]🐱
        System.out.println(diff1);//[pig]🐖
        // 并集
        Sets.SetView<String> union = Sets.union(sets, sets2);
        System.out.println(union);//[dog, duck, cat, pig]🐕🦆🐱🐖
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄鸭技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值