Java8 list分组

实战按月分类list数据

数据源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"2018年08月":[
{
"createTime":"2018-08-15 15:51:16"
},
{
"createTime":"2018-08-15 15:51:15"
}
],
"2018年09月":[
{
"createTime":"2018-09-15 15:51:16"
},
{
"createTime":"2018-09-15 15:51:15"
}
]
}

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//-----------------实体类-----------------
public class ThematicMap extends BaseBean {
....
public String getMonth(){
Date createTime= this.getCreateTime(); //获取basebean的时间
SimpleDateFormat format1 = new SimpleDateFormat("yyyy年MM月");
return format1.format(createTime.getTime());
}
}
//--------------------------------------

List<ThematicMap> thematicMapList = thematicMapMapper.listForPage(params);
//getMonth方法获取数据,
Map<String,List<ThematicMap>> stringListMap=thematicMapList.stream().collect(Collectors.groupingBy(ThematicMap::getMonth,LinkedHashMap::new,Collectors.toList()));

Collectors.groupingBy(Function<? super T, ? extends K> classifier, ​ Supplier<M> mapFactory, ​ Collector<? super T, A, D> downstream)有三个参数

如果不考虑顺序一个参数即可thematicMapList.stream().collect(Collectors.groupingBy(ThematicMap::getMonth));

第二个参数是指定容器:默认值是HashMap::new,但是它会导致乱序,因此使用LinkedHashMap

最终数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"2018年08月":[
{
"createTime":"2018-08-15 15:51:16"
},
{
"createTime":"2018-08-15 15:51:15"
}
],
"2018年09月":[
{
"createTime":"2018-09-15 15:51:16"
},
{
"createTime":"2018-09-15 15:51:15"
}
]
}
参考

Collectors.groupingBy分组后的排序问题