本文推荐一些java中好用的工具类
- 如统计执行时长的 Guava下的 Stopwatch 类
- Bean 与 Map 相互转换的 Apache的BeanUtils
计时相关
项目中经常有记录某一操作花费多长时间的需求,如下是最开始的代码,是不是很熟悉?
1 2 3 4 5 6
| long start = System.currentTimeMillis();
Thread.sleep(2020);
long end = System.currentTimeMillis(); System.out.println("运行时间:"+(end - start)+ "ms");
|
这种方式确实简单,但是这种方式也有不灵活的地方
- 默认情况下我们只能取ms为单位,如果需要分钟,则需要自己换算单位。
- 不能支持更复杂的计时需求,如中途暂停计时,当代码执行到某一步再继续计时。
下面介绍一个关于计时的工具类 Guava下的 Stopwatch
引入依赖
1 2 3 4 5
| <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>23.5-jre</version> </dependency>
|
Stopwatch代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| @Test public void stopwatch1() throws InterruptedException { Stopwatch stopwatch=Stopwatch.createStarted();
Thread.sleep(2020); System.out.println(stopwatch.elapsed(TimeUnit.MILLISECONDS));
stopwatch.stop(); Thread.sleep(1000);
stopwatch.start(); Thread.sleep(2020); stopwatch.stop();
System.out.println(stopwatch.elapsed(TimeUnit.MILLISECONDS)); }
|
可以看到除了满足基本的计时需求外,其使用更灵活,更简单。
不需要自己再去计算时长
可以中途暂停计时
下面总结下常用的操作
1 2 3 4 5 6 7 8 9 10 11 12
| Stopwatch stopwatch=Stopwatch.createUnstarted(); stopwatch.start();
Stopwatch stopwatch=Stopwatch.createStarted();
stopwatch.stop();
stopwatch.elapsed(TimeUnit.MILLISECONDS)
|
Bean 与 Map 互转
日常开发中经常有将Bean转成Map,或者将Map转成Bean的需求,这里阐述下具体的实现.
目前Map 与 Bean互转有如下几种方式
- 方式一: 通过Jackson 先将Bean转成json,再将json转成Map
- 方式二: 使用Spring的BeanMap类
- 方式三: 使用Apache的BeanUtils
我目前使用方式三. 原因如下
- 方式一 效率不行
- 方式二 需要依赖spring,在有些非spring系工程中不方便使用
使用Apache的BeanUtils
引入依赖
1 2 3 4 5
| <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.4</version> </dependency>
|
bean 转 map
1 2 3 4 5 6 7 8 9 10 11 12
|
public static Map beanToMap(Object bean){ Map<String,String> map=Maps.newHashMap(); try { map=BeanUtils.describe(bean); } catch (Exception e) { e.printStackTrace(); } return map; }
|
map 转 bean
1 2 3 4 5 6 7 8 9 10 11
|
public static Object mapToBean(Map map,Object bean){ try { BeanUtils.populate(bean,map); } catch (Exception e) { e.printStackTrace(); } return bean; }
|
微信端的朋友也可关注我的公众号
小马向前走
