是否有一个库按几个属性对实体列表进行分组

时间:2015-10-26 15:19:56

标签: java grouping aggregate

假设结构Pay具有属性:categorylocationdepartmentsum。 拥有这样的实体的集合,我想通过categorylocation对它进行分组,以获得这样的结构: category - location - collection of Pays

有一个Guava Multimaps.index()函数,但它只适用于一级分组。我需要2 +。

这个结构的类型并不重要 - 有些Map<Map<Map>>实现或其他。

我只是不想编写多次迭代代码。希望有一个这样的操作库。你知道吗?

P上。 S.很好,如果适用于Java 7。

1 个答案:

答案 0 :(得分:0)

我认为没有任何东西可以支持超过一个级别的开箱即用。也就是说,不应该进行多次迭代。你可能会这样做:

private Map<String, Multimap<String, Pay>> process(Collection<Pay> input) {
    Map<String,Multimap<String, Pay>> result = Maps.newHashMap();
    for(Pay pay:input) {
        Multimap<String, Pay> multimap = result.get(pay.category);
        if (multimap == null) {
            multimap = ArrayListMultimap.create();
            result.put(pay.category, multimap);
        }
        multimap.get(pay.location).add(pay);
    }
    return result;
}