package javaBean;
import java.util.Date;
/**
* 客户Bean
*
* @author 清茶
* @create 2017-10-26 10:27
*/
public class CustomerVo {
private Long id;
private Long customerId;
private String customerName;
private Date date;
public CustomerVo(Long id, Long customerId, String customerName, Date date) {
this.id = id;
this.customerId = customerId;
this.customerName = customerName;
this.date = date;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getCustomerId() {
return customerId;
}
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
1 package service;
2
3 import java.util.*;
4
5 /**
6 * List分组工具
7 *
8 * @author 清茶
9 * @create 2017-10-26 10:28
10 */
11 public class ListSortUtil {
12
13 public interface GroupBy<T> {
14 T groupBy(Object obj);
15 }
16
17 public static final <T extends Comparable<T>, D> Map<T, List<D>> group(Collection<D> colls, GroupBy<T> gb) {
18 if (colls == null || colls.isEmpty()) {
19 System.out.println("分组集合不能为空");
20 return null;
21 }
22 if (gb == null) {
23 System.out.println("分组依据不能为空");
24 return null;
25 }
26 Iterator<D> iterator = colls.iterator();
27 Map<T, List<D>> map = new HashMap<T, List<D>>();
28 while (iterator.hasNext()) {
29 D d = iterator.next();
30 T t = gb.groupBy(d);
31 if (map.containsKey(t)) {
32 map.get(t).add(d);
33 } else {
34 List<D> list = new ArrayList<D>();
35 list.add(d);
36 map.put(t, list);
37 }
38 }
39
40 return map;
41 }
42 }
package test;
import javaBean.CustomerVo;
import service.ListSortUtil;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 测试集合分组算法
*
* @author 清茶
* @create 2017-10-26 10:40
*/
public class TestListSort {
public static void main(String[] args) {
List<CustomerVo> list = new ArrayList<CustomerVo>();
list.add(new CustomerVo(1L, 2000L, "张1", generateDate(2017, 10, 10)));
list.add(new CustomerVo(2L, 2000L, "张2", generateDate(2017, 10, 10)));
list.add(new CustomerVo(3L, 2001L, "张3", generateDate(2017, 11, 10)));
list.add(new CustomerVo(4L, 2001L, "张4", generateDate(2017, 11, 10)));
list.add(new CustomerVo(5L, 2002L, "张5", generateDate(2017, 12, 10)));
list.add(new CustomerVo(6L, 2002L, "张6", generateDate(2017, 12, 10)));
// 按照客户日期进行排序
Map<Date, List<CustomerVo>> sortMapByDate = sortByDate(list);
Map<Long, List<CustomerVo>> sortMapByLong = sortByLong(list);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for (Map.Entry<Date, List<CustomerVo>> entry : sortMapByDate.entrySet()) {
Date key = entry.getKey();
List<CustomerVo> customerVos = entry.getValue();
System.out.print("键值为:" + sdf.format(key) + "所包含的客户ID分别为:");
for (CustomerVo vo : customerVos) {
System.out.print(vo.getId() + ",");
}
System.out.println();
}
}
private static Map<Date, List<CustomerVo>> sortByDate(List<CustomerVo> vos) {
return ListSortUtil.group(vos, new ListSortUtil.GroupBy<Date>() {
public Date groupBy(Object obj) {
CustomerVo vo = (CustomerVo) obj;
return vo.getDate();
}
});
}
private static Map<Long, List<CustomerVo>> sortByLong(List<CustomerVo> vos) {
return ListSortUtil.group(vos, new ListSortUtil.GroupBy<Long>() {
public Long groupBy(Object obj) {
CustomerVo vo = (CustomerVo) obj;
return vo.getId();
}
});
}
private static Date generateDate(int year, int month, int day) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, day);
Date date = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date returnDate = new Date();
try {
System.out.println(sdf.format(date));
returnDate = sdf.parse(sdf.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
return returnDate;
}
}