首页 > 其他分享 >Guava Table:多维度的数据 Table11

Guava Table:多维度的数据 Table11

时间:2024-12-05 23:56:56浏览次数:9  
标签:multiDimensionalTable 多维度 Sales 2024 put Table Guava

多维度的数据 Table

通常情况下,我们可以将一个二维的 Table 看作是 行列交集的数据表。而如果我们需要在 Table 中进一步进行分组和索引,想要为每一个维度增加一个标识(比如多重索引),那么我们就需要更复杂的 多维度数据

Guava Table 并不直接支持多维度结构(如三维或更高维度的数据结构),但是我们可以通过组合使用 Table 和其他集合数据结构,如 MapList 等,来模拟出多维度的数据表示。

1. 通过嵌套 Table 构建多维度数据

最直接的方式是将 Table 的每个单元格视为一个子 Table,也就是说,行和列可以映射到更深层次的数据结构。我们可以通过嵌套的 Table 来实现三维或者更高维度的数据存储。

举个例子,如果我们想表示一个多维度的时间序列数据,我们可以将 日期区域指标 作为三个维度来进行索引。

示例:


java

复制代码

import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table; import org.junit.jupiter.api.Test; import java.util.Map; public class MultiDimensionalTableTest { @Test public void testMultiDimensionalTable() { // 定义一个三级维度的Table:日期 -> 区域 -> 指标 Table<String, String, Table<String, Integer>> multiDimensionalTable = HashBasedTable.create(); // 创建一个区域-指标的Table Table<String, Integer> regionData = HashBasedTable.create(); regionData.put("Sales", 1000); regionData.put("Profit", 200); // 将这个区域数据放入对应日期和区域 multiDimensionalTable.put("2024-12-01", "North", regionData); // 创建另一个区域-指标的Table Table<String, Integer> regionData2 = HashBasedTable.create(); regionData2.put("Sales", 1200); regionData2.put("Profit", 300); // 将数据添加到多维Table multiDimensionalTable.put("2024-12-01", "South", regionData2); // 查询数据:获取 2024-12-01 日,North 区域的 Sales 指标 Table<String, Integer> northRegionData = multiDimensionalTable.get("2024-12-01", "North"); Integer northSales = northRegionData.get("Sales"); System.out.println("North Region Sales on 2024-12-01: " + northSales); // 输出: 1000 // 查询另一维度的数据 Table<String, Integer> southRegionData = multiDimensionalTable.get("2024-12-01", "South"); Integer southProfit = southRegionData.get("Profit"); System.out.println("South Region Profit on 2024-12-01: " + southProfit); // 输出: 300 } }

在这个示例中,我们创建了一个三维度的 Table,通过将一个 Table 嵌套在另一个 Table 中,模拟了一个三维的结构。我们可以灵活地通过三个索引来查找特定的值。

2. 多维度查询与遍历

如果你想要在多维度的数据结构中进行查询或遍历,可以使用嵌套的 Table 结构进行深度访问,或者使用多重索引来快速定位和操作数据。

示例:


java

复制代码

@Test public void testMultiDimensionalQuery() { Table<String, String, Table<String, Integer>> multiDimensionalTable = HashBasedTable.create(); // 创建并填充数据 Table<String, Integer> regionData1 = HashBasedTable.create(); regionData1.put("Sales", 2000); regionData1.put("Profit", 500); Table<String, Integer> regionData2 = HashBasedTable.create(); regionData2.put("Sales", 1500); regionData2.put("Profit", 450); multiDimensionalTable.put("2024-12-01", "North", regionData1); multiDimensionalTable.put("2024-12-01", "South", regionData2); // 遍历多个维度的数据 for (String date : multiDimensionalTable.rowKeySet()) { System.out.println("Date: " + date); for (String region : multiDimensionalTable.columnKeySet()) { Table<String, Integer> regionData = multiDimensionalTable.get(date, region); System.out.println("Region: " + region); for (Map.Entry<String, Integer> entry : regionData.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } } }

此示例展示了如何遍历多维度的 Table,通过 rowKeySet()columnKeySet() 获取所有行和列,并深入访问每个维度的具体值。这种方式使得我们能够灵活处理复杂的多维数据。

3. 利用 Map 实现更多维度

如果需要更多维度的数据结构(比如四维或五维),你可以通过将 TableMap 结合,创建出更多层次的嵌套结构。这种方式可以通过对 Table 的每个单元格进一步封装和索引,从而实现多维度的数据管理。

示例:


java

复制代码

import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table; import org.junit.jupiter.api.Test; import java.util.Map; public class NestedTableForMoreDimensionsTest { @Test public void testNestedMultiDimensionalTable() { // 使用Map嵌套Table,模拟四维度的数据:年份 -> 月份 -> 区域 -> 销售/利润等 Map<String, Table<String, String, Table<String, Integer>>> nestedTable = new HashMap<>(); // 构建一个三级维度的Table: 区域 -> 销售/利润等 Table<String, String, Integer> regionData = HashBasedTable.create(); regionData.put("Sales", 1500); regionData.put("Profit", 300); // 存储数据到四维Table中 Table<String, String, Table<String, Integer>> yearTable = HashBasedTable.create(); yearTable.put("2024", "January", regionData); nestedTable.put("2024", yearTable); // 查询四维数据 Table<String, String, Integer> januaryData = nestedTable.get("2024").get("January"); Integer januarySales = januaryData.get("Sales"); System.out.println("2024 January Sales: " + januarySales); // 输出: 1500 } }

这里,我们通过 MapTable 的嵌套方式来实现了四维度的数据结构。这种方法能够让我们在复杂的数据模型中进行更多维度的索引和查询,适合多维数据分析和处理的场景。


小结

通过灵活运用 Guava Table 的嵌套和多重索引功能,我们可以轻松实现多维度数据的管理。虽然 Guava Table 本身是二维的,但通过合理的设计,能够扩展其功能,支持三维甚至四维的数据存储和查询。这种技术在处理复杂数据模型、时间序列分析、多维度分析等应用场景中,能够大大提升代码的简洁性和开发效率。

标签:multiDimensionalTable,多维度,Sales,2024,put,Table,Guava
From: https://blog.csdn.net/m0_74022498/article/details/144253145

相关文章

  • 【stable diffusion】保姆级入门课程-Stable diffusion(SD)介绍与安装
    1.什么是AI绘画**ai绘画简单来说就是利用人工智能技术进行绘画创作,它通过程序和算法模拟人类的绘画过程,从而实现自主创作。但是AI绘画并不是无中生有,而是基于训练模型,进行二次创作。举个容易理解的例子,比如你(模型)想写出颜真卿风格的字体,就需要对着颜真卿的书法(素材)不停......
  • vxe-table 树表格单元格选择复制粘贴
    vxe-table树表格单元格选择复制粘贴,树结构默认是平级粘贴,可以通过clip-config.isDeepPaste启用深层数据结构的粘贴;需要注意只支持tree-config.transform模式<template><div><vxe-tablebordershow-overflowkeep-sourceheight="500"......
  • vxe-table 全键盘操作,按键编辑方式设置,覆盖方式与追加方式
    vxe-table全键盘操作,按键编辑方式设置,覆盖方式与追加方式;通过keyboard-config.editMode设置按键编辑方式;支持覆盖方式编辑和追加方式编辑按键编辑方式<template><div><vxe-radio-groupv-model="gridOptions.keyboardConfig.editMode"><vxe-radio-buttonla......
  • 解决 PbootCMS 执行 SQL 错误:no such table: ay_config
    在使用PbootCMS构建网站时,如果遇到“执行SQL发生错误!错误:nosuchtable:ay_config”的提示,通常是因为数据库配置不正确或数据库文件缺失。以下是详细的排查和解决方法:排查步骤检查 data 文件夹中的数据库文件是否存在步骤:导航到PbootCMS安装目录下的 data......
  • vxe-table 实现按回车键自动新增一行
    在开发可编辑表格是,客户提了一个需求,默认情况下回车键是自动跳转下一行,当处于最后一行时,按下回车键需要自动新增一行。并将光标移动到新的行,实现也是非常简单的,vxe-table新版本是支持这个功能的。回车自动换行功能是通过参数keyboard-config.isLastEnterAppendRow来控制是否启......
  • vue3+h5+css+table
    <template><div><tableclass="table"><thead><tr><th><inputtype="checkbox":indeterminate="isIndetermi......
  • 11.Java 集合(ArrayList、Vector、LinkedList、HashSet、LinkedHashSet、TreeSet、Hash
    一、集合概述1、数组的缺点长度开始时必须指定,且一旦指定,不能更改保存的元素必须为同类型对数组数组元素进行增删较为麻烦2、集合的好处可以动态保存多个任意类型提供了一系列方便操作对象的元素3、集合体系Collection接口:单列集合Map接口:双列集合二......
  • Bootstrap-table表格组件和jquery版本兼容问题
    jquery版本引起的bootstrap-table组件表格未能渲染最近写一个带分页的页面,使用了bootstrap-table组件,表格数据怎么都渲染不出来,控制台打印出了下面的信息:一时有点懵,确认js代码及bootstrap-table用法没有任何问题后,将数据放入以前可正确渲染的页面中,表格正常渲染出来了。仔细检......
  • Element-Plus表格:Table自定义合并行数据的最佳实践
    Element-Plus表格:Table自定义合并行数据的最佳实践“知行合一”——王阳明在开发项目中,我们时常会用到表格,许多需求可能会要求自定义特定的行或列。 接下来,我们将探讨在实际开发中如何应对这一挑战。本文案例采用的技术:名称版本Vue3^3.5.12element-plus^2.8.8......
  • Vegetables need more practice.
    NOIP2024游记文章摘要:纯Vegetable直接被创飞了。走下牢斯莱斯不经意间露出劳立式整理领带站定开始自我介绍我是一名高一信竞生。初二开始学习信竞,初三停了半年竞赛,中考还算是顺利地考进了省里的重点高中。初中老师不是很支持我搞竞赛,基本上学竞赛全靠我和老师对着干,以及......