在维护项目的时候碰到前辈很多不错的写法,这里记录一下,为以后的开发省时省力。
1.计算年龄
很多时候表会有出生日期字段,但是我们又需要计算他们的年龄进行展示的时候,可以采用在类里冗余一个age字段,然后在get方法中根据出生日期完成年龄计算。
@Data
@TableName("sys_user")
public class SysUser{
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id", type = IdType.UUID)
private String id;
/**
* 头像
*/
@TableField("AVATAR")
private String avatar;
/**
* 账号
*/
@TableField(name = "ACCOUNT",)
private String account;
/**
* 密码
*/
@TableField("PASSWORD")
private String password;
/**
* 出生日期
*/
@TableField("BIRTHDAY")
private String birthday;
/**
* 年龄
*/
@TableField(exist = false)
private int age;
public int getAge() {
//这个就是为空判断
if (ToolUtil.isNotEmpty(birthday)) {
return DateTimeKit.ageOfNow(birthday);
}
return age;
}
}
有一个计算年龄的工具类
public class DateTimeKit {
/**
* 生日转为年龄,计算法定年龄
* @param birthDay 生日
* @return 年龄
* @throws Exception
*/
public static int ageOfNow(Date birthDay) {
return age(birthDay,date());
}
/**
* 计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄
* @param birthDay 生日
* @param dateToCompare 需要对比的日期
* @return 年龄
* @throws Exception
*/
public static int age(Date birthDay, Date dateToCompare) {
Calendar cal = Calendar.getInstance();
cal.setTime(dateToCompare);
if (cal.before(birthDay)) {
throw new IllegalArgumentException(StrKit.format("Birthday is after date {}!", formatDate(dateToCompare)));
}
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(birthDay);
int age = year - cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH);
if (month == monthBirth) {
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
if (dayOfMonth < dayOfMonthBirth) {
//如果生日在当月,但是未达到生日当天的日期,年龄减一
age--;
}
} else if (month < monthBirth){
//如果当前月份未达到生日的月份,年龄计算减一
age--;
}
return age;
}
}
2.单例列表
顾名思义就是只有一个元素的列表,目前有Collections.singletonList()和Arrays.asList()。
Collections.singletonList(),参数是一个泛型,继承自AbstractList,不可使用add和set,会直接返回异常。感觉用法有点像final就是你创建了就不要变了,优势就是不会浪费资源占用内存小。
Collections.singletonList(null)
Arrays.asList(),参数是一个泛型,继承自AbstractList,不可使用add和set,会直接返回异常。该数组的大小取决于你创建时的大小。与Collections.singletonList不同,可以非1并且元素可以修改。
Arrays.asList(null)
当然了你直接new ArrayList没毛病更健壮但是不够精简。
3.Objects常用方法
Objects.isNull()
Objects.nonNull()
Objects.equals(obj1,obj2)
//对象为空时,抛出空指针异常
Objects.requireNonNull(name,"姓名为空")
//比较两个数组对象
Objects.deepEquals(array1,array2)
equals比较的是地址,如果没有重写方法最后返回的结果是false
import java.util.Objects;
public class User {
private String name;
private String passwd;
public User() {
}
public User(String name, String passwd) {
this.name = name;
this.passwd = passwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(name, user.name) && Objects.equals(passwd, user.passwd);
}
public static void main(String[] args) {
User user1 = new User("张三", "zs");
User user2 = new User("张三", "zs");
System.out.println(Objects.equals(user1,user2));
}
}
4.子标题
正文
在这里插入代码片
5.子标题
正文
在这里插入代码片