0%

工具类整理

本文推荐一些java中好用的工具类

  1. 如统计执行时长的 Guava下的 Stopwatch 类
  2. Bean 与 Map 相互转换的 Apache的BeanUtils

计时相关

项目中经常有记录某一操作花费多长时间的需求,如下是最开始的代码,是不是很熟悉?

1
2
3
4
5
6
long start = System.currentTimeMillis();
//do something
Thread.sleep(2020);

long end = System.currentTimeMillis();
System.out.println("运行时间:"+(end - start)+ "ms");

这种方式确实简单,但是这种方式也有不灵活的地方

  1. 默认情况下我们只能取ms为单位,如果需要分钟,则需要自己换算单位。
  2. 不能支持更复杂的计时需求,如中途暂停计时,当代码执行到某一步再继续计时。

下面介绍一个关于计时的工具类 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=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. 可以中途暂停计时

下面总结下常用的操作

1
2
3
4
5
6
7
8
9
10
11
12
//创建计时器,但是不立即运行 需要主动调用 stopwatch.start()方法开始计时
Stopwatch stopwatch=Stopwatch.createUnstarted();
stopwatch.start();

//创建stopwatch并开始计时
Stopwatch stopwatch=Stopwatch.createStarted();

//暂停计时
stopwatch.stop();

//统计运行时长
stopwatch.elapsed(TimeUnit.MILLISECONDS)

Bean 与 Map 互转

日常开发中经常有将Bean转成Map,或者将Map转成Bean的需求,这里阐述下具体的实现.

目前Map 与 Bean互转有如下几种方式

  1. 方式一: 通过Jackson 先将Bean转成json,再将json转成Map
  2. 方式二: 使用Spring的BeanMap类
  3. 方式三: 使用Apache的BeanUtils

我目前使用方式三. 原因如下

  1. 方式一 效率不行
  2. 方式二 需要依赖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
/**
* bean 转 map
* */
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
/**
* map 转 bean
* */
public static Object mapToBean(Map map,Object bean){
try {
BeanUtils.populate(bean,map);
} catch (Exception e) {
e.printStackTrace();
}
return bean;
}

微信端的朋友也可关注我的公众号

小马向前走

qrcode-12cm