如何在java集合上执行Groupby、Sum、Avg、Min、Max?
我一直在尝试构建一个功能,使我能够过滤Java集合中的数据。最终目标是有以下几点如何在java集合上执行Groupby、Sum、Avg、Min、Max?,java,collections,guava,Java,Collections,Guava,我一直在尝试构建一个功能,使我能够过滤Java集合中的数据。最终目标是有以下几点 SomeBuilder(Collections) .groupby("Key") .filter("Key","Value") .sum() .getResult() ; Collection<HashMap<String, Object>> transformedList = filter(input,"Dep","GlobalWarming"); 其功能主要类似于sql wor
SomeBuilder(Collections)
.groupby("Key")
.filter("Key","Value")
.sum()
.getResult() ;
Collection<HashMap<String, Object>> transformedList = filter(input,"Dep","GlobalWarming");
其功能主要类似于sql world,但并不完全相同。我的问题是如何过滤像
ListOk这样的集合这是为了回答我自己的问题,这可能会帮助其他人。我将使用builder模式来获得方法链接的效果。用于过滤
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;
}
专用静态收集筛选器(
List resMap,最后一个字符串键,
最终对象值){
谓词keyValueMatch=新谓词(){
公共布尔应用(映射字符串映射){
返回值.equals(stringmap.get(key));
}
};
Collection transformedList=Collections2.filter(resMap,keyValueMatch);
返回转换列表;
}
用法如下
SomeBuilder(Collections)
.groupby("Key")
.filter("Key","Value")
.sum()
.getResult() ;
Collection<HashMap<String, Object>> transformedList = filter(input,"Dep","GlobalWarming");
Collection transformedList=filter(输入“Dep”、“GlobalWarming”);
希望这有帮助。欢迎您提出更好的建议。groupBy==filter
?为什么会有这样的数据结构?看看Java8流API及其收集器。Guava的Fluentitable也可以做这些事情。由于遗留的原因,我一直坚持使用数据结构和java版本1.6。如果不使用行映射器,Jdbc将以这种格式向我们提供数据。还有其他方法,但许多工程师使用了这种数据结构,然后对其进行了大量操作。我想插入一个通用机制,后者可以根据性能进行调整。我能换衣服吗List@EricBouweresThanx用于编辑:)。请记住从这里开始设置我的问题的格式。@Kent是的,我将把groupby作为过滤器,以减少每一步的数据集。在列表中,列表中的每个hashmap都有一个键,表示数据库列名,值作为该列的值。i、 e每个hashmap都有用于jdbc查询的单独行数据。