Guava工具类库使用

文章目录

前言

博主介绍:✌目前全网粉丝4W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。

博主所有博客文件目录索引:博客目录索引(持续更新)

CSDN搜索:长路

视频平台:b站-Coder长路

引由

在调公司内部中多次使用到了guava包中的工具类,进而来进行记录梳理下。

初始

引入guava包:

xml 复制代码
<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>21.0</version>
</dependency>

Lists.partition

场景:list集合中数据量过大,可根据需要进行拆分,进而通过循环或者多线程来处理数据。

使用:Lists.partition方法,根据传入的size,对list进行拆分

java 复制代码
public class PartitionTest {

    @Test
    public void test() {
        // 准备数据
        List<String> list = new ArrayList<>();

        list.add("快");
        list.add("敲");
        list.add("代");
        list.add("码");
        list.add("去");

        // 将集合list按照 2 个元素一份进行划分
        List<List<String>> partition = Lists.partition(list, 2);
        System.out.println(partition);
        System.out.println("----------分------------割-------------线----------");
        for (List<String> strings : partition) {
            // 你需要处理的业务逻辑
            System.out.println(strings);
        }

    }
}

公司优化的点

java 复制代码
//每50条来拆分为一个集合
List<List<ComponentConfig>> partition = Lists.partition(saveComponent, 50);
for (List<ComponentConfig> componentConfigs : partition) {
    componentConfigDao.insertBatch(componentConfigs);
}

ImmutableSet(Java不可变集合)

学习博客:Java中的不可变集合,我们换个方式理解!!!


java 复制代码
HANA(15, "Hana"),
STARROCKS(16, "StarRocks"),
HASHDATA(17, "HashData"),

//实战例子,不可变集合枚举
private static final ImmutableSet<MultiEngineType> CAN_BIND_ACCOUNT_ENGINE_TYPE = ImmutableSet.of(TIDB, ORACLE, GREENPLUM, ANALYTICDB_FOR_PG);

HashBasedTable

知识点学习

学习博客:https://blog.csdn.net/weixin_42073629/article/details/106604463

Guava包提供了Table集合类型,来支持这种数据结构Map<FirstName, Map<LastName, Person>>的使用场景,Table支持"row"和"column",而且提供多种视图:

Table视图

  • rowMap()返回一个Map<R, Map<C, V>>的视图。rowKeySet()类似地返回一个Set。
  • row®返回一个非null的Map<C, V>。修改这个视图Map也会导致原表格的修改。
  • 和列相关的方法有columnMap(), columnKeySet()和column©。(基于列的操作会比基于行的操作效率差些)
  • cellSet()返回的是以Table.Cell<R, C, V>为元素的Set。这里的Cell就类似Map.Entry,但是它是通过行和列来区分的。

Table有以下实现

  • HashBasedTable:基于HashMap<R, HashMap<C, V>>的实现。
  • TreeBasedTable:基于TreeMap<R, TreeMap<C, V>>的实现。
  • ImmutableTable:基于ImmutableMap<R, ImmutableMap<C, V>>的实现。(注意,ImmutableTable已对稀疏和密集集合做了优化)
  • ArrayTable:ArrayTable是一个需要在构建的时候就需要定下行列的表格。这种表格由二维数组实现,这样可以在密集数据的表格的场合,提高时间和空间的效率。

简洁:我们可将这种map、map形式看做是一个excel表有行列相对应,其中存储在指定行列中的就是固定值。

案例

java 复制代码
import com.google.common.collect.HashBasedTable;

/**
 * @author changlu
 * @version 1.0
 * @description Guava之HashBasedTable学习
 * @date 2024/03/29 14:45
 */
public class Main {
    public static void main(String[] args) {
        //基于HashMap<R, HashMap<C, V>>的实现。
        //是不是有点像二维表格的表示
        HashBasedTable<String, Integer, String> aTable = HashBasedTable.create();
        // 使用两层循环填充Table数据。外层循环代表行,字符A到C。内层循环代表列,数字1到3。
        // 关注的数据实际就是在 String.format("%c%d", a, b)
        /**
              1   2   3
             ------------------------------------
         A  | A1   A2  A3
         B  | B1   B2  B3
         C  | C1   C2  C3
         */
        for (char a = 'A'; a <= 'C'; ++a) {
            for (Integer b = 1; b <= 3; ++b) {
                // 将数据放入Table中,使用字符转换为字符串作为行键,整数作为列键,格式化字符串作为值。
                aTable.put(Character.toString(a), b, String.format("%c%d", a, b));
            }
        }
        //1、查询列数据
        // 打印第2列的所有数据,即为:{A=A2, B=B2, C=C2}
        System.out.println(aTable.column(2));
        //2、查询行数据
        // 打印键为"B"的行的所有数据,即为:{1=B1, 2=B2, 3=B3}
        System.out.println(aTable.row("B"));
        //3、查询指定行列数据
        // 打印键为"B"的行,列键为2的单元格数据,即为:B2
        System.out.println(aTable.get("B", 2));
        //4、判断是否指定行列键存在
        // 检查Table中是否存在行键为"D",列键为1的数据,即为不存在
        System.out.println(aTable.contains("D", 1));
        System.out.println(aTable.contains("A", 1));//存在
        //5、判断是否存在列键存在
        // 检查Table中是否存在列键为3的列,即true
        System.out.println(aTable.containsColumn(3));
        //6、判断是否存在指定列键
        // 检查Table中是否存在键为"C"的行,即为true
        System.out.println(aTable.containsRow("C"));
        //7、打印所有列数据,即为:{1={A=A1, B=B1, C=C1}, 2={A=A2, B=B2, C=C2}, 3={A=A3, B=B3, C=C3}}
        System.out.println(aTable.columnMap());
        //8、打印所有行数据,即为:{A={1=A1, 2=A2, 3=A3}, B={1=B1, 2=B2, 3=B3}, C={1=C1, 2=C2, 3=C3}}
        System.out.println(aTable.rowMap());
        //9、移出指定行列数据
        //移除键为"B"的行,列键为3的数据,并打印被移除的数据,即为:B3
        System.out.println(aTable.remove("B", 3));
    }
}

资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏👇🏻

更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅

相关推荐
IT小哥哥呀12 天前
如何优化机器学习模型的训练速度?——从基础知识到具体实现
大数据·人工智能·机器学习·数据处理·模型训练
XLYcmy20 天前
一个用于统计文本文件行数的Python实用工具脚本
开发语言·数据结构·windows·python·开发工具·数据处理·源代码
予枫的编程笔记20 天前
【MySQL筑基篇】从排名统计到非结构化存储:MySQL窗口函数与JSON实战教程
mysql·数据处理·窗口函数·后端开发·json数据类型·数据库进阶·mysql高级特性
ha_lydms21 天前
Hadoop 架构
大数据·hadoop·hdfs·架构·mapreduce·yarn·数据处理
Brduino脑机接口技术答疑22 天前
脑机接口数据处理连载(十四) 实时数据处理:低延迟算法设计与性能优化
算法·性能优化·数据处理·脑机接口
阿杰学AI24 天前
AI核心知识70——大语言模型之Context Engineering(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·aigc·数据处理·上下文工程
千桐科技1 个月前
qData 数据中台核心能力解析|第 02 期:从“有标准”到“能执行”,数据标准体系全景解析
数据处理·大数据平台·数据中台·逻辑模型·qdata·数据标准·标准登记
康谋自动驾驶1 个月前
汽车多总线数据采集:挑战、架构与同步策略全解析
算法·自动驾驶·开发·数据处理·总线数据