盘点Hutool6.0中新增的那些方法(上)

首发公众号:赵侠客

引言

在前面《使用Hutool要注意了!升级到6.0后你调用的所有方法都将报错》一文中我发现Hutool从5.0升级到6.0后有很多的不兼容,所有的包名都改了,也盘点了很多不兼容的方法,接下几篇文章中我将盘点Hutool6.0里新增加的方法。

二、MapUtil

2.1 MapUtil.ofKvs()

作用: 快速构建出HashMap

@Test
public void testOfKvs() {
    
    
    Map<String, String> hashMap = MapUtil.ofKvs(true, "name", "公众号", "userName", "赵侠客");
    Map<String, String> linkHashMap = MapUtil.ofKvs(false, "name", "公众号", "userName", "赵侠客");
    Assertions.assertInstanceOf(LinkedHashMap.class, hashMap);
    Assertions.assertInstanceOf(HashMap.class, linkHashMap);
}

注意:

  • 第一个参数为true时构建出的是LinkedHashMap,false时构建出的是HashMap
  • 不像Map.of()构建出的是不可变集合,Hutool的是可变的集合

2.2 MapUtil.removeByValue()

作用: 通过Value删除Map中的元素

@Test
public void  testRemoveByValue(){
    
    
    Map<String, String> hashMap = MapUtil.ofKvs(true, "name", "公众号", "userName", "赵侠客","accountName","赵侠客");
    MapUtil.removeByValue(hashMap, "赵侠客");
    Assertions.assertTrue(hashMap.size()==1);
}

注意:

  • 主要解决原生Map只能通过Key删除,不能通过Value删除
  • 当有多个value时所有相同的Value都会被删除
  • 相比通过Key删除时间复杂为为O(1),通过Value删除时间复杂度为O(n)

2.3 MapUtil.firstMatchValue()

作用: 通过条件找到第一个满足条件的Value


@Test
public void  testFirstMatchValue() {
    
    
    Map<String, String> hashMap = MapUtil.ofKvs(true, "name", "公众号", "userName", "赵侠客", "accountName", "赵侠客");
    String value = MapUtil.firstMatchValue(hashMap, x -> "userName".equals(x.getKey()));
    Assertions.assertEquals(value,"赵侠客");
}

注意:

  • 可能是想解决Map中存储对象时,无法通过对象中的值找到该对象的问题

2.4 MapUtil.firstMatch()

作用: 通过条件找到第一个满足条件的元素

@Test
public void  testFirstMatch() {
    
    
    Map<String, String> hashMap = MapUtil.ofKvs(true, "name", "公众号", "userName", "赵侠客", "accountName", "赵侠客");
    Map.Entry<String,String> stringStringEntry = MapUtil.firstMatch(hashMap, x -> "赵侠客".equals(x.getValue()));
    Assertions.assertEquals(stringStringEntry.getKey(),"userName");
}

注意:

  • 和firstMatchValue不同的是返回一个Map.Entry()

三、NumberUtil

3.1 NumberUtil.formatThousands()

作用: 按千分位格式化数字

@Test
public void testFormatThousands(){
    
    
    double num=1003.14159265358979323846;
    String formatNum= NumberUtil.formatThousands(num,2);
    Assertions.assertEquals("1,003.14",formatNum);
}

注意:

  • 可以对所有数字类型按千分位格式化

3.2 NumberUtil.parseBigInteger()

作用: 将字符串转成BigInteger

@Test
public void testParseBigInteger(){
    
    
    BigInteger bigNum=new BigInteger("999999999999999999999999999999");
    Assertions.assertEquals(NumberUtil.parseBigInteger("999999999999999999999999999999"),bigNum);
    Assertions.assertEquals(NumberUtil.parseBigInteger("-999999999999999999999999999999"),bigNum.multiply(BigInteger.valueOf(-1)));
    Assertions.assertEquals(NumberUtil.parseBigInteger("0xF"),BigInteger.valueOf(15));
    Assertions.assertEquals(NumberUtil.parseBigInteger("#F"),BigInteger.valueOf(15));
    Assertions.assertEquals(NumberUtil.parseBigInteger("010"),BigInteger.valueOf(8));
}

注意:

  • 支持正数及负数
  • 默认是十进制,支持十六进制和八进制

3.3 NumberUtil.isZero()

作用: 判断一个数字是否为0

@Test
public void testIsZero(){
    
    
    Integer integerZero=0;
    Long    longZero=0L;
    Byte    byteZero=0;
    Short    shortZero=0;
    BigInteger    bigIntegerZero=BigInteger.valueOf(0);
    Float    floatZero=0.0f;
    Double    doubleZero=0.0d;
    Assertions.assertTrue(NumberUtil.isZero(integerZero));
    Assertions.assertTrue(NumberUtil.isZero(longZero));
    Assertions.assertTrue(NumberUtil.isZero(byteZero));
    Assertions.assertTrue(NumberUtil.isZero(shortZero));
    Assertions.assertTrue(NumberUtil.isZero(bigIntegerZero));
    Assertions.assertTrue(NumberUtil.isZero(floatZero));
    Assertions.assertTrue(NumberUtil.isZero(doubleZero));
}

注意:

  • 支持所有的数字类型如Integer、Long、Byte、Short、BigInteger、Float、Double

3.4 NumberUtil.intToRoman()

作用: 将阿拉伯数字转成罗马数字

@Test
public void testIntToRoman(){
    
    
    Assertions.assertEquals(NumberUtil.intToRoman(1),"I");
    Assertions.assertEquals(NumberUtil.intToRoman(2),"II");
    Assertions.assertEquals(NumberUtil.intToRoman(3),"III");
    Assertions.assertEquals(NumberUtil.intToRoman(4),"IV");
    Assertions.assertEquals(NumberUtil.intToRoman(5),"V");
    Assertions.assertEquals(NumberUtil.intToRoman(6),"VI");
    Assertions.assertEquals(NumberUtil.intToRoman(7),"VII");
    Assertions.assertEquals(NumberUtil.intToRoman(10),"X");
    Assertions.assertEquals(NumberUtil.intToRoman(50),"L");
    Assertions.assertEquals(NumberUtil.intToRoman(100),"C");
    Assertions.assertEquals(NumberUtil.intToRoman(500),"D");
    Assertions.assertEquals(NumberUtil.intToRoman(1000),"M");
}

3.5 NumberUtil.romanToInt()

作用: 将罗马数字转成阿拉伯数字


@Test
public void testRomanToInt(){
    
    
    Assertions.assertEquals(NumberUtil.romanToInt("I"),1);
    Assertions.assertEquals(NumberUtil.romanToInt("II"),2);
    Assertions.assertEquals(NumberUtil.romanToInt("III"),3);
    Assertions.assertEquals(NumberUtil.romanToInt("IV"),4);
    Assertions.assertEquals(NumberUtil.romanToInt("V"),5);
    Assertions.assertEquals(NumberUtil.romanToInt("VI"),6);
    Assertions.assertEquals(NumberUtil.romanToInt("VII"),7);
    Assertions.assertEquals(NumberUtil.romanToInt("X"),10);
    Assertions.assertEquals(NumberUtil.romanToInt("L"),50);
    Assertions.assertEquals(NumberUtil.romanToInt("C"),100);
    Assertions.assertEquals(NumberUtil.romanToInt("D"),500);
    Assertions.assertEquals(NumberUtil.romanToInt("M"),1000);
}

四、TimeUtil

4.1 获取每月的开始结束时间


Assertions.assertEquals(TimeUtil.beginOfMonth(LocalDateTime.now()),LocalDateTime.parse("2024-08-01T00:00:00"));
Assertions.assertEquals(TimeUtil.beginOfMonth(LocalDate.now()),LocalDate.parse("2024-08-01"));
Assertions.assertEquals(TimeUtil.endOfMonth(LocalDateTime.now(),true),LocalDateTime.parse("2024-08-31T23:59:59"));
Assertions.assertEquals(TimeUtil.endOfMonth(LocalDate.now()),LocalDate.parse("2024-08-31"));

4.2 获取每年的开始结束时间


Assertions.assertEquals(TimeUtil.beginOfYear(LocalDateTime.now()),LocalDateTime.parse("2024-01-01T00:00:00"));
Assertions.assertEquals(TimeUtil.beginOfYear(LocalDate.now()),LocalDate.parse("2024-01-01"));
Assertions.assertEquals(TimeUtil.endOfYear(LocalDateTime.now(),true),LocalDateTime.parse("2024-12-31T23:59:59"));
Assertions.assertEquals(TimeUtil.endOfYear(LocalDate.now()),LocalDate.parse("2024-12-31"));

4.3 TimeUtil.ofPattern

作用: 从字符串快速生成DateTimeFormatter对象

DateTimeFormatter dateTimeFormatter=TimeUtil.ofPattern("yyyy-MM-dd HH:mm:ss");
//2024-08-05 15:04:24
String now= dateTimeFormatter.format(LocalDateTime.now());

4.4 TimeUtil.max

作用: 获取时分秒最大值

//23:59:59
System.out.println(LocalTimeUtil.max(true));
//23:59:59.999999999
System.out.println(LocalTimeUtil.max(false));

注意:

  • 参数传true 毫秒归零
  • 参数传false 毫秒为最大值

总结

本文主要介绍了Hutool6.0中MapUtill、NumberUtil、TimeUtil三个工具类中新添加的方法,并给出方法的作用及注意事项,每个方法都给出了详细的单元测试用例。Hutool6.0中还添加了很多其它的方法,未完待续,请关注公众号:赵侠客,持续更新中…

猜你喜欢

转载自blog.csdn.net/whzhaochao/article/details/140938419