如何在java集合上进行Groupby,Sum,Avg,Min,Max?

时间:2014-05-10 15:15:44

标签: java collections guava

我一直在尝试构建一个能够在Java集合中过滤数据的功能。最终目标是有一些事情如下。

SomeBuilder(Collections)
.groupby("Key")
.filter("Key","Value")
.sum()
.getResult() ;

该功能大多类似于sql世界但不完全。我的问题是如何过滤像List<HashMap<String,Object>这样的集合?

如何在此类集合中应用groupby逻辑?

显示过滤此类集合的代码片段将有很大帮助。如果番石榴可以做到这一点,请举个例子。

编辑: - 我已为此问题添加了答案,但请提出更好的方法。希望这能帮到别人。为了做Sum,Avg,Count将在我继续我的项目时更新。

1 个答案:

答案 0 :(得分:0)

好的这是回答我自己的问题,可以帮助别人。我将使用构建器模式来获得方法链的效果。用于过滤

List<HashMap<String,Object>>

,我使用了番石榴,这是我试图做的一个例子。不是最好的方式,而是首发。

  private static Collection<HashMap<String, Object>>  filter(
        List<HashMap<String, Object>> resMap, final String key,
        final Object value) {
    Predicate<Map<String, Object>> keyValueMatch = new Predicate<Map<String, Object>>() {
        public boolean apply(Map<String, Object> stringStringMap) {
            return value.equals( stringStringMap.get(key));
        }
    };

    Collection<HashMap<String, Object>>  transformedList = Collections2.filter(resMap, keyValueMatch);
    return transformedList;
}

用法如下。

 Collection<HashMap<String, Object>>  transformedList =  filter(input,"Dep","GlobalWarming");

希望这有帮助。欢迎任何更好的建议。