java - 如何使用 Guava 连接两个表

标签 java join guava

事实表:

Id Year Month countryId Sales
1  1999 1     1         3000
2  1999 2     1         2300
3  2000 3     2         3999
4  2000 4     3         2939

维度表:

Id country province
1  US      LA
2  US      CA
3  US      GA
4  EN      LN

我像这样使用 Guava 表:

Table<Integer, String, Object> table = Tables.newCustomTable(
        Maps.<Integer, Map<String, Object>> newLinkedHashMap(),
        new Supplier<Map<String, Object>>() {
            public Map<String, Object> get() {
                return Maps.newLinkedHashMap();
            }
        });

    table.put(1, "Year", 1999);
    table.put(1, "Month", 1);
    table.put(1, "countyId", 1);
    table.put(1, "Sales", 3000);
    // ...... etc


    table1.put(1, "county", "US");
    table1.put(1, "provice", 1999);
    // ......

我想实现一个 LEFT JOIN,例如:

1 1999 1 1 3000 US LA
2 1999 2 1 2300 US LA
3 2000 3 2 3999 US CA
4 2000 4 3 2939 EN LN

我该怎么办?

最佳答案

Guava 的 Table 不应该像任何 SQL 的表一样使用,因为它是一个集合。 SQL 的表被设计为可索引、可排序、可过滤等。Guava 的 Table 只有其中的一小部分,而且只是间接的,关节不是它们的一部分(除非你玩转换)。

你需要做的是拥有你的两个表并循环遍历 table 的元素并在 table1 中找到相应的映射。

在你的情况下,我相信你最好用 List 代替 table 和 Guava Table 代替 table1。循环遍历列表并在获取元素时创建最终对象。

关于java - 如何使用 Guava 连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729906/

相关文章:

java - 系列 Activity 的按钮 "Back, Next and Exit"

mysql - 具有多个值的更新表 SET

mysql - 将表 1 中的 2 列连接到表 2

java - Google Guava 与 Apache Commons

java - Guava 多图。把值(value)放在最后和开始

java - 为缓存创建全局(JVM)最大权重的简单方法?

java - 图像背景,覆盖油漆?

java - 单击后删除按钮?

JavaFx,不在开头显示内容

mysql - 使用前缀和组总和连接多个 mysql 表