java8 list按季度分组
时间: 2023-07-20 09:23:40 浏览: 145
可以使用Java 8中的Stream API来实现按季度分组的操作。具体实现方法如下:
假设有一个List对象,包含多个日期类型的元素,代码如下:
```java
List<Date> dateList = new ArrayList<>();
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-01-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-02-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-03-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-04-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-05-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-06-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-07-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-08-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-09-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-10-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-11-01"));
dateList.add(new SimpleDateFormat("yyyy-MM-dd").parse("2021-12-01"));
```
按季度分组的实现代码如下:
```java
Map<Integer, List<Date>> quarterMap = dateList.stream()
.collect(Collectors.groupingBy(date -> (date.getMonth() / 3) + 1));
```
这里使用了Stream的groupingBy方法,将日期按照季度进行分组,并返回一个Map对象,其中key为季度数(1~4),value为该季度的日期列表。
需要注意的是,这里使用了date.getMonth()方法获取日期的月份,月份从0开始,所以需要加1。另外,由于季度数从1开始,所以需要加1。
最终的输出结果为:
```
{1=[Fri Jan 01 00:00:00 CST 2021, Mon Feb 01 00:00:00 CST 2021, Mon Mar 01 00:00:00 CST 2021],
2=[Thu Apr 01 00:00:00 CST 2021, Sat May 01 00:00:00 CST 2021, Tue Jun 01 00:00:00 CST 2021],
3=[Thu Jul 01 00:00:00 CST 2021, Sun Aug 01 00:00:00 CST 2021, Wed Sep 01 00:00:00 CST 2021],
4=[Fri Oct 01 00:00:00 CST 2021, Mon Nov 01 00:00:00 CST 2021, Wed Dec 01 00:00:00 CST 2021]}
```
可以看到,日期列表已经按照季度分组,并正确输出了每个季度的日期列表。
阅读全文