Java代码片段总结

一些Java常用的代码片段总结,如获取一个时间段内的所有时间,map根据value分组等等

计算一个时间段内的日期集合
1
2
3
4
5
6
7
8
9
10
11
12
/**
* 收集一个时间段内的日期集合
* @param begin 开始时间
* @param end 结束时间
* @return 日期串集合
*/
public static List<String> getDateList(LocalDate begin, LocalDate end){
return Stream.iterate(begin, localDate -> localDate.plusDays(1))
.limit(ChronoUnit.DAYS.between(begin, end) + 1)
.map(LocalDate::toString)
.collect(Collectors.toList());
}
根据对象的某个字段来升序或降序
1
2
3
4
//根据Dict对象的sort字段降序排序
dictList.sort(Comparator.comparing(Dict::getSort).reversed());
//根据Dict对象的sort字段升序排序
dictList.sort(Comparator.comparing(Dict::getSort));
Map根据value值分组

将Map转换为一个entry集合,然后再用集合分组的方式,就很简单的实现这个功能了

遇到想对Map进行stream处理的时候,就要获取他的entrySet来操作,就是一个List然后里面放着一个一个的Map的entry对象,直接调用e.getKey和e.getValue就能获取每一个map了!

1
Map<Integer, List<Map.Entry<String,Integer>>>result= SataMap.entrySet().stream().collect(Collectors.groupingBy(c -> c.getValue()));
对List中的对象进行分组求和(计数)

根据AlarmCountBO里的alarmTypeId进行分组,然后对count字段的值求和,如果想要分组计数,第二个参数就改为Collectors.counting()

1
2
3
Map<Integer, Integer> levelCountMap = alarmCount.stream()
.collect(Collectors.groupingBy(AlarmCountBO::getAlarmTypeId,
Collectors.summingInt(AlarmCountBO::getCount)));
枚举类转map
1
Map<Integer, String> stateMap = Arrays.stream(NStateEnum.values()).collect(Collectors.toMap(NStateEnum::getCode, NStateEnum::getDesc));
实体类转map

使用beanMap,效率高,用了缓存,不费时间,还简单

1
2
3
4
import org.springframework.cglib.beans.BeanMap;
BeanMap beanMap = BeanMap.create(screenNumPo);
// 可以看下BeanMap源码,里面用了WeakHashMap进行缓存,用的真是恰到好处
private static volatile Map<ClassLoader, AbstractClassGenerator.ClassLoaderData> CACHE = new WeakHashMap();
时间戳和日期之间的互相转换
1
2
3
4
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.DateTime;
// 时间戳是date,单位毫秒
DateTime DateUtil.date(Long date)