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));
    }
}

资料获取

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

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

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

相关推荐
青春不败 177-3266-05206 天前
MATLAB在生态环境数据处理与分析
matlab·生态学·遥感·生态系统服务·数据处理·环境科学
总线通信小百科11 天前
汽车零部件LIN总线测试三大痛点
经验分享·自动驾驶·汽车·数据处理
CodexDave14 天前
Python 自动化接单实战(二):Excel 批量清洗如何把规则与异常分开
python·自动化·excel·python自动化·数据处理·excel清洗·异常报告
RestCloud17 天前
什么是CDC数据同步?如何实现高效的数据实时传输
etl·数据处理·etlcloud·数据同步·数据集成平台·cdc数据同步·实时数据传输
YouGIS顽石工坊20 天前
Python GDAL实战:ASTER GDEM V003全国DEM高程数据处理(1123幅分幅合并→34省裁切,30m精度)
gis·遥感·dem·数据处理·空间数据库·数字高程模型·aster gdem
RestCloud24 天前
ETL是什么?全域数据集成平台核心能力解析
数据仓库·etl·数据清洗·数据处理·etlcloud·数据集成工具
last_zhiyin1 个月前
一步步上手ETL工具之------Informatica PowerCenter
数据仓库·etl·数据处理·powercenter·informatica
nothing&nowhere1 个月前
用 Python 做问卷数据清洗:无效样本检测与处理实战
开发语言·python·数据清洗·数据处理·问卷星·问卷星脚本·刷问卷
RestCloud2 个月前
从架构师视角看ETL工具选型:如何构建可演进的数据集成平台
数据仓库·etl·cdc·数据处理·数据传输·elt
weixin_468466852 个月前
Data-Engineering-Zoomcamp 新手实战指南
python·自动化·pandas·编程·数据处理