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

Guava Table:多维度的数据 Table15

时间:2024-12-07 18:30:08浏览次数:8  
标签: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/2401_89358905/article/details/144227072

相关文章

  • Spring Guava数据流转换与处理11
    在现代开发中,数据流的转换与处理是一个非常常见的需求。无论是从文件读取数据、接收用户输入,还是从数据库提取信息,数据往往需要进行一系列转换和处理。Guava提供了许多工具和类,能够简化这一过程,尤其是在处理数据时,它的链式调用风格使得数据流的处理更加清晰、优雅。通过结合Gua......
  • Spring Guava数据流转换与处理15
    在现代开发中,数据流的转换与处理是一个非常常见的需求。无论是从文件读取数据、接收用户输入,还是从数据库提取信息,数据往往需要进行一系列转换和处理。Guava提供了许多工具和类,能够简化这一过程,尤其是在处理数据时,它的链式调用风格使得数据流的处理更加清晰、优雅。通过结合Gua......
  • vxe-table 实现指定列默认是隐藏,点击重置自动还原状态
    vxe-table实现控制指定列默认隐藏,重置自定义列后还能自动还原,有个需求需要将某一列默认是隐藏的,但是可以通过自定义列设置显示,当点击自定义的重置按钮时,还能回复到默认的状态,实现也是非常简单的。通过visible参数设置默认为不显示就可以了。官网:https://vxetable.cn/通过vi......
  • Stable Diffusion核心网络结构——VAE
    本文详细介绍SD模型的三部件之一——VAE,阐述VAE在SD模型中的作用和完整的架构。目录传统VAEStableDiffusion核心网络结构SD模型整体架构初识VAE模型【1】StableDiffusion中VAE的核心作用【2】StableDiffusion中VAE的高阶作用【3】StableDiffusion中VAE模型的完......
  • Spring Guava数据流转换与处理9
    在现代开发中,数据流的转换与处理是一个非常常见的需求。无论是从文件读取数据、接收用户输入,还是从数据库提取信息,数据往往需要进行一系列转换和处理。Guava提供了许多工具和类,能够简化这一过程,尤其是在处理数据时,它的链式调用风格使得数据流的处理更加清晰、优雅。通过结合Gua......
  • Spring Guava数据流转换与处理6
    在现代开发中,数据流的转换与处理是一个非常常见的需求。无论是从文件读取数据、接收用户输入,还是从数据库提取信息,数据往往需要进行一系列转换和处理。Guava提供了许多工具和类,能够简化这一过程,尤其是在处理数据时,它的链式调用风格使得数据流的处理更加清晰、优雅。通过结合Gua......
  • Spring Guava数据流转换与处理11
    在现代开发中,数据流的转换与处理是一个非常常见的需求。无论是从文件读取数据、接收用户输入,还是从数据库提取信息,数据往往需要进行一系列转换和处理。Guava提供了许多工具和类,能够简化这一过程,尤其是在处理数据时,它的链式调用风格使得数据流的处理更加清晰、优雅。通过结合Gua......
  • Spring Guava数据流转换与处理3
    在现代开发中,数据流的转换与处理是一个非常常见的需求。无论是从文件读取数据、接收用户输入,还是从数据库提取信息,数据往往需要进行一系列转换和处理。Guava提供了许多工具和类,能够简化这一过程,尤其是在处理数据时,它的链式调用风格使得数据流的处理更加清晰、优雅。通过结合Gua......
  • HTML布局-div,span,table
    HTML布局HTML布局-使用<div>元素div元素是用于分组HTML元素的块级元素HTML布局-使用表格table标签是创建布局的一种简单的方式大多数站点可以使用div,table元素来创建多列。css用于对元素进行定位,或者为页面创建背景以及色彩丰富的外观HTML布局-提示使用css好处是,如果把c......
  • C++——哈希表(Hash Table),附加于 Python 中字典区别于联系
    哈希表(HashTable)是一种非常高效的数据结构,用于存储键值对(key-value)。允许我们以非常快的速度进行插入、删除和查找操作,因为这些操作的时间复杂度平均为O(1)。哈希表通过使用哈希函数将键映射到表中的位置,从而实现快速访问。一、【哈希表的基本概念】1、哈希函数:这是一个将......