目录

Guava 提供了集合操作 `List`、`Set` 和 `Map` 三个工具类

入门示例
guava 最佳实践 学习指南

以下是使用Google Guava库中的工具方法来创建和操作List、Set、Map集合的一些示例:

List相关操作

  1. 创建List

    • 使用Lists.newArrayList()创建一个新的可变ArrayList实例。

      java 复制代码
      List<Integer> list = Lists.newArrayList(1, 2, 3);
         // 创建不可修改的列表
         List<String> unmodifiableList = Lists.newArrayList("a", "b", "c");
         List<String> unmodifiableList2 = ImmutableList.copyOf(Lists.newArrayList("d", "e", "f"));
         System.out.println(unmodifiableList);
      
         /*
         Exception in thread "main" java.lang.UnsupportedOperationExceptioncom.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:269)cn.ucmed.adaptation.guava.preconditions.Example003.main(Example003.java:20)
          */
       //  unmodifiableList2.add("g");
         System.out.println(unmodifiableList2);
    • 使用Lists.newLinkedList()创建一个新的LinkedList实例。

      java 复制代码
      List<Integer> list = Lists.newLinkedList();
  2. 反转List

    • 使用Lists.reverse()反转List中的元素顺序。

      java 复制代码
      List<Integer> list = Lists.newArrayList(1, 2, 3);
      list = Lists.reverse(list); // 结果为[3, 2, 1]
  3. 分区List

    • 使用Lists.partition()将List分割成多个子List。

      java 复制代码
      List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5);
      List<List<Integer>> partitions = Lists.partition(list, 2); // 结果为[[1, 2], [3, 4], [5]]
  4. 转换List元素

    • 使用Lists.transform()对List中的每个元素进行转换。

      java 复制代码
      List<String> list = Lists.newArrayList("apple", "banana", "orange");
      List<Integer> lengths = Lists.transform(list, String::length); // 结果为[5, 6, 6]

Set相关操作

  1. 创建Set

    • 使用Sets.newHashSet()创建一个新的可变HashSet实例。

      java 复制代码
      Set<String> set = Sets.newHashSet("Apple", "Banana");
  2. 集合操作

    • 使用Sets.union()Sets.intersection()Sets.difference()Sets.symmetricDifference()进行集合的并集、交集、差集和对称差集操作。

      java 复制代码
      Set<String> setA = Sets.newHashSet("Apple", "Banana", "Cherry");
      Set<String> setB = Sets.newHashSet("Banana", "Date", "Fig");
      Set<String> union = Sets.union(setA, setB); // 并集
      Set<String> intersection = Sets.intersection(setA, setB); // 交集
      Set<String> difference = Sets.difference(setA, setB); // 差集
      Set<String> symmetricDifference = Sets.symmetricDifference(setA, setB); // 对称差集

Map相关操作

  1. 创建Map

    • 使用Maps.newHashMap()创建一个新的可变HashMap实例。

      java 复制代码
      Map<String, Integer> map = Maps.newHashMap();
  2. 过滤Map键

    • 使用Maps.filterKeys()根据给定的谓词过滤Map的键。

      java 复制代码
      Map<String, Integer> scores = Maps.newHashMap();
      scores.put("Alice", 85);
      scores.put("Bob", 90);
      Map<String, Integer> highScores = Maps.filterKeys(scores, name -> name.startsWith("A") || name.startsWith("B"));
  3. 转换Map值

    • 使用Maps.transformValues()对Map中的值进行转换。

      java 复制代码
      Map<String, Integer> scores = Maps.newHashMap();
      scores.put("Alice", 85);
      scores.put("Bob", 90);
      Map<String, String> scoreStrings = Maps.transformValues(scores, score -> score + " points");

4. 计算Map的交集

Map的交集是指两个Map中都有的键值对。Guava提供了Maps.difference()方法来计算两个Map的差异,通过该方法我们可以获取交集。

java 复制代码
HashMap<String, Integer> mapA = Maps.newHashMap();
mapA.put("a", 1);
mapA.put("b", 2);
mapA.put("c", 3);

HashMap<String, Integer> mapB = Maps.newHashMap();
mapB.put("b", 20);
mapB.put("c", 3);
mapB.put("d", 4);

MapDifference<String, Integer> mapDifference = Maps.difference(mapA, mapB);
Map<String, Integer> entriesInCommon = mapDifference.entriesInCommon();
System.out.println(entriesInCommon); // 输出两个Map的交集

5. 计算Map的差集

Map的差集是指在一个Map中存在而在另一个Map中不存在的键值对。同样使用Maps.difference()方法,我们可以获取差集。

java 复制代码
Map<String, Integer> entriesOnlyOnLeft = mapDifference.entriesOnlyOnLeft(); // 只存在于mapA中的entry
Map<String, Integer> entriesOnlyOnRight = mapDifference.entriesOnlyOnRight(); // 只存在于mapB中的entry
System.out.println(entriesOnlyOnLeft); // 输出只存在于mapA中的entry
System.out.println(entriesOnlyOnRight); // 输出只存在于mapB中的entry

  Map<String, Integer> mapA = new HashMap<>();
        mapA.put("a", 1);
        mapA.put("b", 2);
        mapA.put("c", 3);

        Map<String, Integer> mapB = new HashMap<>();
        mapB.put("b", 20);
        mapB.put("c", 3);
        mapB.put("d", 4);

        MapDifference<String, Integer> difference = Maps.difference(mapA, mapB);
        Map<String, Integer> symmetricDifference = new HashMap<>();
        symmetricDifference.putAll(difference.entriesOnlyOnLeft());
        symmetricDifference.putAll(difference.entriesOnlyOnRight());

        System.out.println("对称差集: " + symmetricDifference);

6. 计算Map的并集

Map的并集是指两个Map中所有的键值对,包括重复的键,重复的键将以第二个Map中的值为准。

java 复制代码
Map<String, Integer> combaMap = new HashMap<>(mapA); // 将mapA作为基础
combaMap.putAll(mapB); // 将mapB中的所有entry添加到合并Map中
System.out.println(combaMap); // 输出两个Map的并集

这些示例展示了Guava库在集合操作方面的一些基本用法,可以帮助简化代码并提高效率。更多详细信息和高级用法可以参考Guava官方文档和相关技术博客。

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
网络探索者25 分钟前
DirectX修复工具(DirectX Repair)官网免费下载
windows
心灵宝贝1 小时前
SQLyog一款被遗忘的MySQL管理利器深度解析
windows
Doris Liu.9 小时前
如何检测代码注入(Part 2)
windows·python·安全·网络安全·网络攻击模型
bjxiaxueliang9 小时前
一文详解QT环境搭建:Windows使用CLion配置QT开发环境
开发语言·windows·qt
郁大锤17 小时前
如何在 Windows 上安装与配置 Tomcat
java·windows·tomcat
松树戈20 小时前
windows通用网线连接ubuntu实现ssh登录、桌面控制、文件共享【实操&常见问题解决思路】
linux·windows·ubuntu·ssh
〆、风神20 小时前
策略模式与元数据映射模式融合 JSR 380 验证规范实现枚举范围校验
windows·spring·策略模式
开开心心就好21 小时前
开启智能生活新篇:免费 APP 实现家电万能操控
java·windows·python·微信·pdf·生活·软件需求
az44yao21 小时前
windows 下 通过虚拟化拦截对一个text.txt文件的访问 如果要打开的文件名为 text.txt 提示无权限
windows
Alger_Hamlet1 天前
Mac电脑 鼠标右键助手 像windows的右键菜单
windows·macos·计算机外设