今天有个小需求,简单记录一下,将返回的list根据其中的时间字段进行分组~~
/**
@describe 根据集合某一属性创建分组返回map
@param
* @param List<HeCloudDisk> list
@return
@author 何章怀晓 hezhanghuaixiao
@date 2020/9/15 17:33
@other
*/
private static Map<String, List<HeCloudDisk>> groupByList(List<HeCloudDisk> list) {
//将集合根据时间进行分组返回
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Map<String, List<HeCloudDisk>> rerslist = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
try{
//首元素
if (i == 0) {
//当前元素的时间
String format = simpleDateFormat.format(list.get(i).getCreateTime());
//下一个元素时间
String format1 = simpleDateFormat.format(list.get(i + 1).getCreateTime());
List<HeCloudDisk> l = new ArrayList<>();
//对比时间
if (format.equals(format1)) {
l.add(list.get(i));
rerslist.put(format, l);
} else {
//把上一个加入map
// rerslist.put(format, l);
List<HeCloudDisk> l2 = new ArrayList<>();
l2.add(list.get(i + 1));
rerslist.put(format, l2);
}
} else {
//不是首元素,进来先判断当前元素和上一个元素是否同类
//当前元素的时间
String format = simpleDateFormat.format(list.get(i).getCreateTime());
//上一个元素时间
String format1 = simpleDateFormat.format(list.get(i - 1).getCreateTime());
if (format.equals(format1)) {
//取出上次添加的集合
List<HeCloudDisk> heCloudDisks = rerslist.get(format1);
heCloudDisks.add(list.get(i));
rerslist.put(format, heCloudDisks);
} else {
//如果当前的和前一个不一样,说明是新的
List<HeCloudDisk> heCloudDisks = new ArrayList<>();
heCloudDisks.add(list.get(i));
rerslist.put(format, heCloudDisks);
}
}
}catch (Exception e){
e.printStackTrace();
}
}
return rerslist;
}
调用一下
创建5组对象,分别有不同的时间,将所有对象放入一个大集合里,然后将此集合调用100次
for (int i = 0; i <100 ; i++) {
Map<String, List<HeCloudDisk>> stringListMap = groupByList(list);
System.out.print(stringListMap.size()+" ")
}
每次按照时间均分为5组
将一个大集合按照时间分为了5组