1、集合参数拼接成字符串
String word = list.stream().map(entity::getxx).collect(Collectors.joining(","));
2、获取当前时间,SimpleDateFormat 不是线程安全的,在多线程环境会有并发安全问题,DateFormatUtils是线程安全的
String date = DateFormatUtils.format(new Date(), "yyyy-MM-dd");
3、字符串转 Date
String date2 = "2021-10-01 15:00:00";
Date date = DateUtils.parseDate(date2, "yyyy-MM-dd HH:mm:ss");
4、获取年月日,线程安全的
LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
5、判断集合不为空
CollectionUtils.isNotEmpty(new ArrayList<>());
6、判断对象为空
Objects.isNull(entity)
7、并集、交集
List<Object> list1 = Arrays.asList("1", "2", "3", "4");
List<Object> list2 = Arrays.asList("4", "5", "6", "7");
//并集 输出: [1, 2, 3, 4, 5, 6, 7]
CollectionUtils.union(list1, list2);
//交集 输出:[4]
CollectionUtils.intersection(list1, list2);
8、两个时间相差距离多少天多少小时多少分多少秒
/**
* 两个时间相差距离多少天多少小时多少分多少秒
*
* @param one
* 时间参数 1 格式:1990-01-01 12:00:00
* @param two
* 时间参数 2 格式:2009-01-01 12:00:00
* @return long[] 返回值为:{天, 时, 分, 秒}
* @throws java.text.ParseException
*/
public static String getDistanceTimes(Date one, Date two) {
long day = 0;
long hour = 0;
long min = 0;
long time1 = one.getTime();
long time2 = two.getTime();
long diff;
if (time1 > time2) {
diff = time1 - time2;
day = diff / (24 * 60 * 60 * 1000);
hour = (diff / (60 * 60 * 1000) - day * 24);
min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
}
long[] times = { day, hour, min, sec };
String str = String.format("%d天%d时%d分", day, hour, min);
return str;
}
9、字符串Base64编码、解码
//Base64编码
String s = Base64.getEncoder().encodeToString("你好".getBytes(StandardCharsets.UTF_8));
//Base64解码
String s = new String(Base64.getDecoder().decode("你好"), StandardCharsets.UTF_8);
10、减少循环次数
反例:两层循环,如果数据较多,非常消耗cpu资源
for(User user: userList) {
for(Role role: roleList) {
if(user.getRoleId().equals(role.getId())) {
user.setRoleName(role.getName());
}
}
}
正例:把第二层循环变成 map,直接通过 key 获取想要的数据
Map<Long, List<Role>> roleMap = roleList.stream().collect(Collectors.groupingBy(Role::getId));
for (User user : userList) {
List<Role> roles = roleMap.get(user.getRoleId());
if(CollectionUtils.isNotEmpty(roles)) {
user.setRoleName(roles.get(0).getName());
}
}
11、高效找出两个集合中的不同元素
/**
* 找出两个list的不同元素
* @param list1
* @param list2
* @return
*/
private static List<String> getDiffByHashSet(List<String> list1,List<String> list2){
//temp存放两个list的共有元素
List<String> temp = new ArrayList<>();
//hashSet底层通过hashmpa实现的,为了防止map扩容增加性能代价;初始化长度为两个链表的长度
Set<String> set = new HashSet<>((int)((float)(list1.size()+list2.size())/0.75F+1.0F));
for (String s1:list1) {
set.add(s1);
}
for (String s2:list2) {
//添加不成功说明元素共有
if(!set.add(s2)){
temp.add(s2);
}
set.add(s2);
}
//删除set中存在temp的元素
set.removeAll(temp);
return new ArrayList<>(set);
}
12、删除list集合中特定元素
//方式一
list.removeIf(item -> "1".equals(item));
//方式二
Iterator it = list.iterator();
while (it.hasNext()){
User user = (User)it.next();
if("xxx".equals(user.getxxx())){
list.remove(user);
}
}
13、List分组获取第一个元素的方法
Map<Integer, Coupon> resultList = couponList.stream().collect(Collectors.groupingBy(Coupon::getCouponId,Collectors.collectingAndThen(Collectors.toList(),value->value.get(0))));
14、对象集合按时间排序
//升序
coDoctorVOList.sort(Comparator.comparing(CoDoctorVO::getTime));
//降序
coDoctorVOList.sort((m1, m2) -> m2.getTime().compareTo(m1.getTime()));
14、对象集合根据某个字段去重
userList = userList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getUserid))), ArrayList::new));