Java 开源库送给你

Java 8 Stream
Stream 不算是工具库,但是通过 stream 提供的一系列方法,可以实现集合的过滤、分组、集合转换等诸多操作。

例如下面的方法,实现列表元素根据某个字段去重的功能。

List userList = new ArrayList();
//添加元素
userList = userList.stream().filter(distinctByKey(user->user.getUserId())).collect(Collectors.toList());

private static Predicate distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object,Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
apache commons
官方地址:http://commons.apache.org/

这不是一个库,而是一系列的工具库。

由于包含的库过多,我就不一一列举了,可以到官网一探。有集合处理的、数学计算的、IO 操作的等等,其中最常用的莫过于 Apache Commons Lang 和 Apache Commons Collections 这两个。

Apache Commons Lang 包括一系列工具类,有字符串相关的、时间处理的、反射的、并发包的等等,Apache Commons Collections 专门用作集合处理。

下面举几个例子说明一下,更详细的内容可以到官网查看文档。

字符串判空操作
String s = “”;
Boolean isEmpty = StringUtils.isEmpty(s);
获取类的全名称
ClassUtils.getName(ClassUtils.class);
判断集合是否为空
Boolean isNotEmpty = CollectionUtils.isNotEmpty(list);
反射获取某个类的所有 Field
Field[] fields = FieldUtils.getAllFields(User.class);
Google Guava
官方地址:https://github.com/google/guava

和 Apache Commons 有点儿类似,它也是包含了一系列的比如字符串、集合、反射、数学计算等的操作封装,还可以用作 JVM 缓存。

举几个例子说明:

扫描二维码关注公众号,回复: 11509064 查看本文章

New 各种对象
List list = Lists.newArrayList();
Set set = Sets.newHashSet();
Map<String,Object> map = Maps.newConcurrentMap();

// 不可变集合
ImmutableList immutableList = ImmutableList.of(“1”, “2”, “3”);
列表转符号分隔的字符串
List list = new ArrayList();
list.add(“1”);
list.add(“2”);
list.add(“3”);
String result = Joiner.on("-").join(list);

1-2-3
求交集、并集、差集等
例如下面代码求 set1 和 set2 的交集

Set set1 = Sets.newHashSet(1, 2, 3, 4, 5, 6);
Set set2 = Sets.newHashSet(1,2,3,4);

Sets.SetView intersection = Sets.intersection(set1, set2);
Joda Time
官方地址:https://www.joda.org/joda-time/

一个日期、时间处理的工具库。如果你不是经常做日期处理,那差不多每次需要的时候都需要查询相关的 API,而有了工具类就不一样了,只要一个 “.”,你想要的方法就出现了,而 Joda Time 就是一款好用的工具库。

比如下面这个方法,计算到新年还有多少天。

public Days daysToNewYear(LocalDate fromDate) {
LocalDate newYear = fromDate.plusYears(1).withDayOfYear(1);
return Days.daysBetween(fromDate, newYear);
}
OkHttp3
官方地址:https://square.github.io/okhttp/

一个 HTTP 客户端,使用简单,性能良好,是时候放弃 HttpClient 了。

一个 get 请求:

OkHttpClient client = new OkHttpClient();

String run(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();

try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
一个 post 请求:

public static final MediaType JSON
= MediaType.get(“application/json; charset=utf-8”);

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(json, JSON);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
Json 系列
Jackson
Spring 默认的 Json 序列化工具,其实已经足够用了。

Gson
Google 出品,功能齐全。

FastJson
阿里出品,算法良好,性能最优。

EasyExcel
官方地址:https://www.yuque.com/easyexcel/doc/easyexcel

阿里开源的 Excel 操作工具库,可以看做是 Apache POI 的增强封装版、优化版。

如果你的数据量很大,那用 EasyExcel 可以节省内存,提升效率,并且没有并发风险。

如果你的 Excel 足够复杂,那用 EasyExcel 会比你直接用 POI 少些很多代码。

比如我实现了下面这个 Excel 动态导出,包括动态表头、动态合并单元格的功能,只用了很少的代码,如果是使用 POI 的话,那可能代码量增加不止一倍啊。

excel

TinyPinyin
官方地址:https://github.com/promeG/TinyPinyin

中文转拼音,把你输入的中文转换成拼音。比如搜索功能要实现这样的功能,输入 “fengzheng” 搜索,会匹配到 “风筝”这个词语,这就需要中文转拼音了。

有的同学说了,这不是拼音转英文吗?当然不是在输入“fengzheng”的时候转换了,而是在包含“风筝”的这条记录中有一个拼音的额外字段,这样搜索的时候直接匹配拼音那个字段。

chinese_name pinyin_name
风筝 fengzheng
反射工具库 - jOOR
官方地址:https://github.com/jOOQ/jOOR

它是 JDK 反射包的友好封装,通过一系列简单友好的链式操作实现反射调用。比如下面这个例子

public interface StringProxy {
String substring(int beginIndex);
}

String substring = on(“java.lang.String”)
.create(“Hello World”)
.as(StringProxy.class)
.substring(6);
简单的代码实现 JDK 动态代理,节省了不少代码。

MyBatis-Plus
官方地址:https://mp.baomidou.com/

只要你的项目中有数据库访问,那你肯定用过或者至少听说过 MyBatis ,但是如果你只用 MyBatis 需要针对每个DAO方法写对应的 SQL Statement(也就是 mapper.xml 中的代码块),当然有一些自动生成的工具,MyBatis 就有它提供的 MyBatis Generator,比如我也稍做加工,做过一个web 版的 MyBatis Generator,开发效率是提高了,但是每个 mapper.xml 文件的代码量很大,于是 MyBatis-Plus 就要出场了。

官网上对他的定义如下:

只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
只需简单配置,即可快速进行 CRUD 操作,从而节省大量时间。
热加载、代码生成、分页、性能分析等功能一应俱全。
最后,在配上 MybatisX IDEA 插件,也是可以了。
深圳网站建设www.sz886.com

猜你喜欢

转载自blog.csdn.net/weixin_45121123/article/details/106638255