风筝我作为一个野路子开发者,直到遇见下面的这几个工具库,才知道之前重复造了不少轮子,而且轮子还不一定有人家的圆。相信跟我一样,没事儿造轮子的人还不在少数,有些人就是对造轮子感兴趣,这个咱也无话可说,但是,比如我,我是造轮子之前不知道这世上已经有好用的轮子了,害,无知限制了我的想象力。

比如我们在拿到一个 List 集合之后,要对这个集合进行判空操作,以前我一直是这样写的:

List<String> list = getList();
if (list != null && list.size() > 0) {//do something
}

虽然这样也没什么问题,但是,我懒啊,每次敲这么多代码,也挺累啊。有同学说,那你包装成一个方法不就行了,每次调用个方法就 OK 啦。这不,同学,你就在造轮子了,已经有人帮你写好了这样类似的一系列方法了。

来让我们认识认识这些轮子吧。

Java 8 Stream

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

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

List<User> userList = new ArrayList();
//添加元素
userList =  userList.stream().filter(distinctByKey(user->user.getUserId())).collect(Collectors.toList());private static <T> Predicate<T> 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 缓存。

举几个例子说明:

New 各种对象

List<String> list = Lists.newArrayList();
Set<String> set = Sets.newHashSet();
Map<String,Object> map = Maps.newConcurrentMap();// 不可变集合
ImmutableList<String> immutableList = ImmutableList.of("1", "2", "3");

列表转符号分隔的字符串

List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
String result = Joiner.on("-").join(list);> 1-2-3

求交集、并集、差集等

例如下面代码求 set1 和 set2 的交集

Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4, 5, 6);
Set<Integer> set2 = Sets.newHashSet(1,2,3,4);Sets.SetView<Integer> 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 的话,那可能代码量增加不止一倍啊。

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 就要出场了。

官网上对他的定义如下:

  1. 只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
  2. 只需简单配置,即可快速进行 CRUD 操作,从而节省大量时间。
  3. 热加载、代码生成、分页、性能分析等功能一应俱全。

最后,在配上 MybatisX IDEA 插件,也是可以了。

vjtools

官方地址:https://github.com/vipshop/vjtools

这是唯品会的开源工具包,这里主要介绍其中的 vjkit 模块,是关于文本,集合,并发等基础功能的核心类库。这个库是我很早之前搜索日期操作的时候偶然发现的,我发现里面日期处理的 API 相当全面而且很实用,还在我的项目中用过一段时间。

最后

好用的工具库可以提高我们的开发效率,而且也是我们学习源码的好去处,和其他的开源框架(比如 Spring、Dubbo)一样,看看优秀的代码是如何实现的。

别再重复造轮子了,几个值得应用到项目中的 Java 开源库送给你相关推荐

  1. json转string工具_不要再重复造轮子了,这款开源工具类库贼好使!

    Hutool是一个小而全的Java工具类库,它帮助我们简化每一行代码,避免重复造轮子.如果你有需要用到某些工具类的时候,不妨在Hutool里面找找.本文总结了平时常用的16个工具类,希望对大家有所帮助 ...

  2. 校验输入框的内容不能重复_答应我,用了这个jupyter插件,别再重复造轮子了

    以下文章来源于Python大数据分析 ,作者费弗里 1 简介 在使用Python.R等完成日常任务的过程中,可能会经常书写同样或模式相近的同一段代码,譬如每次使用matplotlib绘制图像的时候可以 ...

  3. 7个实用的Python自动化代码,别再重复造轮子了!

    关于Python有一句名言:不要重复造轮子. 但是问题有三个: 1.你不知道已经有哪些轮子已经造好了,哪个适合你用.有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子. 2.确实没重复 ...

  4. 别再重复造轮子了,这几个开源 Java 工具库送给你

    文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 风筝我作为一个野路子开发者,直到遇见下面的这几个工具库,才知道之前重复造了不少轮子,而且轮子还不一 ...

  5. 不要再重复造轮子了,Hutool这款开源工具类库贼好使

    读者群里有个小伙伴感慨说,"Hutool 这款开源类库太厉害了,基本上该有该的工具类,它里面都有."讲真的,我平常工作中也经常用 Hutool,它确实可以帮助我们简化每一行代码,使 ...

  6. 不再重复造轮子,AI 给你推荐更好的代码,还没bug

    2020-09-18 14:47 导语:还在抠bug抠到怀疑人生? 作者 | 青 暮 编辑 | 丛 末 程序员的的代码大部分都不是如同写书法那般一挥而就,而需要反复地抠bug,抠到怀疑人生. 剑桥大学 ...

  7. Spring Boot并不重复“造轮子”

    2.1 Spring Boot简介 Spring Boot是由Pivotal团队提供的基于Spring的全新框架,其设计目的是简化Spring应用的搭建和开发过程.该框架遵循"约定大于配置& ...

  8. 程序员到底要不要重复造轮子?

    分享一波:程序员赚外快-必看的巅峰干货 关于这个话题,现在这里阐述立场:就公司工作而言,不建议重复造轮子.就个人技术而言,强烈建议造轮子! 程序员圈子里流行这么一句话:"不要重复造轮子&qu ...

  9. 微软 CEO 萨提亚·纳德拉:不要重复造轮子,提升技术强密度

    扫描二维码,查看精彩回顾 据中国互联网络信息中心(CNNIC)发布的第 44 次<中国互联网络发展状况统计报告>显示,截至 2019 年 6 月,我国网民规模达 8.54 亿,较 2018 ...

最新文章

  1. vue写的简单版todolist
  2. 重写Java Object类中的equals()方法
  3. 数据中心架构有哪些组件?
  4. Linux apt-get install无法定位问题
  5. 怎么算matlab算法复杂度,算法复杂度分析
  6. [设计模式]合成复用原则
  7. Android编译环境(1) - 编译Native C的模块
  8. Swift coreAnimation 加计时器写的游戏《飞机大战》
  9. System.getProperty(user.dir)
  10. 实力封装:Unity打包AssetBundle(四)
  11. 《计算机操作系统》(慕课版) 第1章 操作系统引论
  12. 使用plsql登陆oracle数据库,使用PLSQL 创建Oracle数据库用户
  13. 一款商城APP开发要多少钱?
  14. maven创建eclipse wtp项目
  15. 企业微信【加入群聊】群活码十问十答
  16. 智慧天下:专业版和绿色版有什么区别?
  17. 8.3 有效工作量证明
  18. Python正则表达式用法详解
  19. 深度解析|农贸市场如何实现交易数字化转型升级
  20. qq邮件在腾讯官方服务器有备份吗,foxmail怎么备份和恢复邮件?

热门文章

  1. 达内出来的混得怎么样了_大学经验丨计算机专业学生,应该怎么样才不会沦为普通程序员?...
  2. mysql binlog增量备份脚本_实现mysqlldump+binlog日志全量备份和增量备份脚本
  3. python单引号打不出来_python里单引号怎么打
  4. 京东Android APP HarmonyOS 开发实践!
  5. 放开我们追梦的翅膀——致所有无私的父母
  6. 文件夹变成计算机程序,文件夹变成exe快速解决方法
  7. Web3知识科普:什么是多签钱包?
  8. 2019中兴校招面经整理
  9. EasyExcel合并单元格,通过注解方式实现自定义合并策略
  10. H - Hangar Hurdles