类的使用和java比较器_weixin_67201964的博客-爱代码爱编程
类的使用
LocalDate,LocalTime,LocalDateTime的使用
1.now(): 获取当前的日期,时间,日期+时间
LocalDate now = LocalDate.now();
LocalTime now1 = LocalTime.now();
LocalDateTime now2 = LocalDateTime.now();
System.out.println(now);
System.out.println(now1);
System.out.println(now2);
2.of(): 设置的年月日时分秒没有偏移量
LocalDateTime of = LocalDateTime.of(2002, 9, 26, 12, 45, 59, 59);
System.out.println(of);
3.getXxx()获取当月的第几天 ,withDayOfMonth();修改当月第几天,plusMonths() 在现有的基础上加上几个月或者其他
minusDays() 减去多少
三者运行截图:
4. Instant的应用:
@Test
public void test2(){
//获取本初子午线对应的时间
Instant now = Instant.now();
System.out.println(now);//使用的是中间时区
//添加时间的偏移量
OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);
//获取自1970 1.1(UTC) 开始的毫秒数
long l = now.toEpochMilli();
System.out.println(l);
//通过给的毫秒数 获取Instant实例
Instant instant = Instant.ofEpochMilli(2131312313123l);
System.out.println(instant);
}
运行结果:
附加一个重点:(自定义日期格式)
结果:
Java比较器
Comparable和Comparator两个接口
1.Comparable 通过类去实现接口
1)自然排序 Comparable接口
按照价格从低到高
重写compareTo方法 自定义方法 当前类的对象大于形参对象返回1 反之-1 相等则比较下一个属性 如果是String属性的话 直接用compareTo方法即可从低到高排序
*定义一个实现接口的类*
public class Goods implements Comparable{
String name;
int price;
public Goods(String name, int price) {
this.name = name;
this.price = price;
}
@Override
public int compareTo(Object o) {
if (o instanceof Goods){
Goods goods = (Goods) o;
if (goods.price<this.price){
return 1;
}else if (goods.price>this.price){
return -1;
}else
return this.name.compareTo(goods.name);
}
throw new RuntimeException("数据类型不匹配");
}
@Override
public String toString() {
return "Goods{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
}
public void test2(){
Goods[] goods = new Goods[4];
goods[0] = new Goods("华为",999);
goods[1] = new Goods("华强北",108);
goods[2] = new Goods("苹果",1999);
goods[3] = new Goods("小米",108);
Arrays.sort(goods);
System.out.println(Arrays.toString(goods));
}
运行结果:
2.Comparator接口直接在方法中通过接口直接重写方法—>定制排序
1)当元素的类型没有实现Comparable接口 又不方便修改代码 就使用Comparator方法
public void test3(){
String[] arr = new String[]{"AA","RR","SS","WW","DD","GG","QQ","JJ"};
Arrays.sort(arr, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof String && o2 instanceof String){
String s1 = (String) o1;
String s2 = (String) o2;
return -s1.compareTo(s2);
}
throw new RuntimeException("输入的类型不一致");
}
});
System.out.println(Arrays.toString(arr));
}
}
运行结果:
小知识点:
一般形参是类的话 如果需要用到形参和当前类进行比较或者运算 需要先判断形参的对象是不是能和当前类instanceof(当前类需要是子类)
然后将形参类的对象强转成当前类的对象
class A -----> (Object o){
if(o instanceof A){
A a = (A)O; ----->强转
}
}
一般的进行比大小的话 返回-1 1 0 的话 如果给的商品不是需要的类型的话 直接手动抛出一个异常
throw new XxxxXxxxxx();