如何使用Guava连接两个表

时间:2013-02-06 13:09:14

标签: 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

我该怎么办?

1 个答案:

答案 0 :(得分:3)

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

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

在您的情况下,我认为最好使用List替换table并将Table替换为table1。循环遍历列表,并在获取元素时制作最终对象。