Guava 提供了集合操作 `List`、`Set` 和 `Map` 三个工具类
入门示例
guava 最佳实践 学习指南
以下是使用Google Guava库中的工具方法来创建和操作List、Set、Map集合的一些示例:
List相关操作
-
创建List
- 使用
Lists.newArrayList()创建一个新的可变ArrayList实例。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实例。List<Integer> list = Lists.newLinkedList();
- 使用
-
反转List
- 使用
Lists.reverse()反转List中的元素顺序。List<Integer> list = Lists.newArrayList(1, 2, 3); list = Lists.reverse(list); // 结果为[3, 2, 1]
- 使用
-
分区List
- 使用
Lists.partition()将List分割成多个子List。List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5); List<List<Integer>> partitions = Lists.partition(list, 2); // 结果为[[1, 2], [3, 4], [5]]
- 使用
-
转换List元素
- 使用
Lists.transform()对List中的每个元素进行转换。List<String> list = Lists.newArrayList("apple", "banana", "orange"); List<Integer> lengths = Lists.transform(list, String::length); // 结果为[5, 6, 6]
- 使用
Set相关操作
-
创建Set
- 使用
Sets.newHashSet()创建一个新的可变HashSet实例。Set<String> set = Sets.newHashSet("Apple", "Banana");
- 使用
-
集合操作
- 使用
Sets.union()、Sets.intersection()、Sets.difference()和Sets.symmetricDifference()进行集合的并集、交集、差集和对称差集操作。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相关操作
-
创建Map
- 使用
Maps.newHashMap()创建一个新的可变HashMap实例。Map<String, Integer> map = Maps.newHashMap();
- 使用
-
过滤Map键
- 使用
Maps.filterKeys()根据给定的谓词过滤Map的键。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"));
- 使用
-
转换Map值
- 使用
Maps.transformValues()对Map中的值进行转换。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的差异,通过该方法我们可以获取交集。
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()方法,我们可以获取差集。
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中的entryMap<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中的值为准。
Map<String, Integer> combaMap = new HashMap<>(mapA); // 将mapA作为基础
combaMap.putAll(mapB); // 将mapB中的所有entry添加到合并Map中
System.out.println(combaMap); // 输出两个Map的并集
这些示例展示了Guava库在集合操作方面的一些基本用法,可以帮助简化代码并提高效率。更多详细信息和高级用法可以参考Guava官方文档和相关技术博客。
相关文章:
Guava 提供了集合操作 `List`、`Set` 和 `Map` 三个工具类
入门示例 guava 最佳实践 学习指南 以下是使用Google Guava库中的工具方法来创建和操作List、Set、Map集合的一些示例: List相关操作 创建List 使用Lists.newArrayList()创建一个新的可变ArrayList实例。List<Integer> list Lists.newArrayList(1, 2, 3);/…...
深入解析 Elasticsearch 集群配置文件参数
在自建 Elasticsearch 集群时,我们需要通过 elasticsearch.yml 文件对节点角色、网络设置、集群发现和数据存储路径等进行灵活配置。配置项的合理设置对集群的稳定性、性能与扩展性影响深远。本文将以一个示例配置文件为蓝本,逐条解析各参数的含义与建议…...
WebMvcConfigurer和WebMvcConfigurationSupport(MVC配置)
一:基本介绍 WebMvcConfigurer是接口,用于配置全局的SpringMVC的相关属性,采用JAVABean的方式来代替传统的XML配置文件,提供了跨域设置、静态资源处理器、类型转化器、自定义拦截器、页面跳转等能力。 WebMvcConfigurationSupport是webmvc的…...
用 javascript 来回答宇宙外面是什么
宇宙外面是什么呢? 估计这个问题要困扰很多人, 让我们用一段 javascript 代码来回答一下. 一, 从一段代码说起 var 地球 {名字 : "地球",女友 : "月亮",外面 : {名字 : "太阳系",老大 : "太阳",老二 : {名字 : "木星",二…...
我的性能优化经验
专业方向:App cpu/memory/gpu/流畅度/响应时间的优化,Anr,Framework CarPowerManagementService模块的(STR),从0~1完成性能监控体系搭建,完成3大版本迭代高质量性能交付 响应时间: …...
XSLT 编辑 XML
XSLT 编辑 XML 介绍 XSLT(可扩展样式表语言转换)是一种用于转换XML文档的语言。它允许开发人员将XML数据转换为其他格式,如HTML、PDF或纯文本。XSLT通过使用XPath查询来定位XML文档中的元素,并对这些元素应用转换规则。在本教程…...
数智读书笔记系列010 生命3.0:人工智能时代 人类的进化与重生
书名:生命3.0 生命3.0:人工智能时代,人类的进化与重生 著者:[美]迈克斯•泰格马克 迈克斯・泰格马克 教育背景与职业 教育背景:迈克斯・泰格马克毕业于麻省理工学院,获物理学博士学位。职业经…...
Transfomer的各层矩阵
一、输入 输入一句话:Hello CYZLAB the inspired world 每个单词为一个token 二、Embedding 这里的词向量维度为6,矩阵的行数为token数,列数是词向量的维度 这列是注释不算hello122694CYZLAB222372the222596inspired132440world431273 …...
代码随想录第51天
99.岛屿数量 深搜 import java.util.*;class Main{static int[][] directions {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};static boolean[][] visited;public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int m sc.nextInt();int…...
基础库httpx的使用
urllib 库和 requests 库的使用,已经可以爬取绝大多数网站的数据,但对于某些网站依然无能为力。什么情况?这些网站强制使用HTTP/2.0协议访问,这时 urllib 和requests 是无法爬取数据的,因为它们只支持 HTTP/1.1,不支持…...
c++中如何保持结构体的线程安全?3D坐标的线程安全:从理论到最优解
使用mutex的困扰 struct Point3d {std::mutex mtx;double x, y, z;void set(double nx, double ny, double nz) {std::lock_guard<std::mutex> lock(mtx);x nx; y ny; z nz;} };这种方案虽然安全,但性能开销确实不小。每次访问都需要加锁解锁,…...
Zabbix6.0升级为6.4
为了体验一些新的功能,比如 Webhook 和问题抑制等,升级个小版本。 一、环境信息 1. 版本要求 一定要事先查看官方文档,确认组件要求的版本,否则版本过高或者过低都会出现问题。 2. 升级前后信息 环境升级前升级后操作系统CentOS…...
答题考试系统v1.6.1高级版源码分享+uniapp+搭建测试环境
一.系统介绍 一款基于FastAdminThinkPHPUniapp开发的小程序答题考试系统,支持多种试题类型、多种试题难度、练题、考试、补考模式,提供全部前后台无加密源代码,支持私有化部署 二.测试环境 系统环境:CentOS、 运行环境&#x…...
【Lua热更新】下篇 -- 更新中
上篇链接:【Lua热更新】上篇 文章目录 三、xLua热更新📖1.概述📚︎2.导入xLua框架🔖3. C#调用Lua3.1Lua解析器3.2Lua文件夹的重定向3.3Lua解析器管理器3.4全局变量获取3.5全局函数获取3.6映射到List和Dictionary3.7映射到类3.8映…...
射频测试入门学习(三)——程控仪器是怎样和电脑连接通信的
目录 一、程控仪器需要哪些条件 二、可程控仪器 三、专业的仪器通信软件、驱动 四、编程语言 五、电脑控制仪器条件汇总 六、仪器指令查询 七、结语 一、程控仪器需要哪些条件 1、需要具备硬件条件(可程控的仪器、个人计算机(PC)) 2、专业的仪器通信软件、驱动 3、…...
并发控制之Semaphore
Semaphore 作用 信号量,用于控制同时访问特定资源的线程数量,通过协调各个线程,以确保对共享资源的访问不会导致冲突或数据不一致等问题,有点类似令牌桶,内部维护一组许可证, acquire获取许可证…...
第R3周:RNN-心脏病预测
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 🍺要求: 1 本地读取并加载数据。 2 了解循环神经网络(RNN)的构建过程 3 测试集accuracy到达87% 🍻拔…...
【数值特性库】入口文件
数值特性库入口文件为lib.rs。该文件定义一系列数字特性的trait(特征),这些特性可以被不同的数字类型实现,从而提供一套通用的数值操作方法。下面是对代码中关键部分的解释: 一、基础设置 #