首页 开发常用工具类
文章
取消

开发常用工具类

开发常用工具类

Google guava

guava的优点

  • 高效设计良好的API,被Google的开发者设计,实现和使用
  • 遵循高效的java语法实践
  • 使代码更刻度,简洁,简单
  • 节约时间,资源,提高生产力

    guava的核心库

  • 集合 [collections]
  • 缓存 [caching]
  • 原生类型支持 [primitives support]
  • 并发库 [concurrency libraries]
  • 通用注解 [common annotations]
  • 字符串处理 [string processing]
  • I/O 等等。

maven引入

1
2
3
4
5
6
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>

基本工具[Basic utilities]

集合[Collections]

MultiMap

MultiSet

统计一个词在文档中出现了多少次,传统的做法是这样的:

1
2
3
4
5
6
7
8
9
10
Map<String, Integer> counts = new HashMap<String, Integer>();
for (String word : words) {
    Integer count = counts.get(word);
    if (count == null) {
        counts.put(word, 1);
    } else {
        counts.put(word, count + 1);
    }
}

Multiset.addAll(Collection)可以添加Collection中的所有元素并进行计数

Table

当你想使用多个键做索引的时候,你可能会用类似Map<FirstName, Map<LastName, Person»的实现,这种方式很丑陋,使用上也不友好。Guava为此提供了新集合类型Table,它有两个支持所有类型的键:”行”和”列”。

Table提供多种视图,以便你从各种角度使用它:

  • rowMap():用Map<R, Map<C, V»表现Table<R, C, V>。同样的, rowKeySet()返回”行”的集合Set
  • row(r) :用Map<C, V>返回给定”行”的所有列,对这个map进行的写操作也将写入Table中。
  • 类似的列访问方法:columnMap()、columnKeySet()、column(c)。(基于列的访问会比基于的行访问稍微低效点)
  • cellSet():用元素类型为Table.Cell<R, C, V>的Set表现Table<R, C, V>。Cell类似于Map.Entry,但它是用行和列两个键区分的。

Table有如下几种实现:

  • HashBasedTable:本质上用HashMap<R, HashMap<C, V»实现;
  • TreeBasedTable:本质上用TreeMap<R, TreeMap<C,V»实现;
  • ImmutableTable:本质上用ImmutableMap<R, ImmutableMap<C, V»实现;注:ImmutableTable对稀疏或密集的数据集都有优化。
  • ArrayTable:要求在构造时就指定行和列的大小,本质上由一个二维数组实现,以提升访问速度和密集Table的内存利用率。ArrayTable与其他Table的工作原理有点不同,请参见Javadoc了解详情。

BiMap

要实现键值对的双向映射需要维护两个单独的map,并保持它们间的同步。

例如:

1
2
3
4
5
Map<String, Integer> nameAndId = Maps.newHashMap();
Map<Integer, String> idAndName = Maps.newHashMap();
nameAndId.put("Bob", 42);
idAndName.put(42, "Bob");

这种方式容易出错,而且对于值已经在map中的情况,会变得非常混乱。在BiMap中可以这样:

1
2
3
4
BiMap<String, Integer> userId = HashBiMap.create();
...
String userForId = userId.inverse().get(id);

ClassToInstanceMap

ClassToInstanceMap是一种特殊的Map:它的键是类型,而值是符合键所指类型的对象。

为了扩展Map接口,ClassToInstanceMap额外声明了两个方法:T getInstance(Class) 和T putInstance(Class, T),从而避免强制类型转换,同时保证了类型安全。

ClassToInstanceMap有唯一的泛型参数,通常称为B,代表Map支持的所有类型的上界。例如:

1
2
3
ClassToInstanceMap<Number> numberDefaults=MutableClassToInstanceMap.create();
numberDefaults.putInstance(Integer.class, Integer.valueOf(0));

从技术上讲,ClassToInstanceMap实现了Map<Class<? extends B>, B>——或者说,是一个映射B的子类型到对应实例的Map。这让ClassToInstanceMap包含的泛型声明有点令人困惑, 但B始终是Map所支持类型的上界——通常B就是Object。

对于ClassToInstanceMap,Guava提供了两种有用的实现:MutableClassToInstanceMap和 ImmutableClassToInstanceMap。

Apache common Lang/BeanUtils

apache common Lang

apache提供的众多commons工具包,号称Java第二API,而common里面lang3包更是被我们使用得最多的。 使用apache common Lang

Hutool

   
模块 介绍
hutool-aop J DK动态代理封装,提供非IOC下的切面支持
hutool-bloomFilter 布隆过滤,提供一些Hash算法的布隆过滤
hutool-cache 简单缓存实现
hutool-core 核心,包括Bean操作、日期、各种Util等
hutool-cron 定时任务模块,提供类Crontab表达式的定时任务
hutool-crypto 加密解密模块,提供对称、非对称和摘要算法封装
hutool-db JDBC封装后的数据操作,基于ActiveRecord思想
hutool-dfa 基于DFA模型的多关键字查找
hutool-extra 扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)
hutool-http 基于HttpUrlConnection的Http客户端封装
hutool-log 自动识别日志实现的日志门面
hutool-script 脚本执行封装,例如Javascript
hutool-setting 功能更强大的Setting配置文件和Properties封装
hutool-system 系统参数调用封装(JVM信息等)
hutool-json JSON实现
hutool-captcha 图片验证码实现
hutool-poi 针对POI中Excel和Word的封装
hutool-socket 基于Java的NIO和AIO的Socket封装
hutool-jwt JSON Web Token (JWT)封装实现

使用Hutool

fastjson

在日志解析,前后端数据传输交互中,经常会遇到字符串(String)与json,XML等格式相互转换与解析, 其中json以跨语言,跨前后端的优点在开发中被频繁使用,基本上可以说是标准的数据交换格式。 fastjson是一个java语言编写的高性能且功能完善的JSON库,它采用一种“假定有序快速匹配”的算法, 把JSON Parse 的性能提升到了极致。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,Web输出等各种应用场景中。

1
2
 JSON.parseObject(jsonStr, Model.class);
 JSON.parseArray(jsonStr, Model.class);

gson

GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。 特点:

  • 快速、高效
  • 代码量少、简洁
  • 面向对象
  • 数据传递和解析方便
1
2
3
4
5
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.0</version>
</dependency>
1
2
Gson gson = new gson();

本文由作者按照 CC BY 4.0 进行授权

前端 JS 项目开发规范

markdown使用指南

载入天数...载入时分秒...