Java 那些最常用的工具类库 | 原力计划
作者 | Java 识堂
责编 | 屠敏
出品 | CSDN(ID:CSDNnews)
Apache Commons
Apache Commons有很多子项目,常用的项目如下:
BeanUtils
提供了一系列对java bean的操作,读取和设置属性值等:
@Datapublic class User { private String username; private String password;}
User user = new User();BeanUtils.setProperty(user, "username", "li");BeanUtils.getProperty(user, "username");
map和bean的互相转换:
// bean->mapMap<String, String> map = BeanUtils.describe(user);// map->beanBeanUtils.populate(user, map);
我们将对象放在缓存中通常用redis中的hash,如下:
# 设置用户信息hset student name testhset student age 10
这种场景下map和bean的互相转换的工具类就特别有用。
Codec
常见的编码,解码方法封装:
// Base64Base64.encodeBase64String(byte[] binaryData)Base64.decodeBase64(String base64String)
// MD5DigestUtils.md5Hex(String data)
// URLURLCodec.decodeUrl(byte[] bytes);URLCodec.encodeUrl(BitSet urlsafe, byte[] bytes);
Collections
交并差等操作
// 判空CollectionUtils.isEmpty(collA);// 交集CollectionUtils.retainAll(collA, collB);// 并集CollectionUtils.union(collA, collB);// 差集CollectionUtils.subtract(collA, collB);// 判等CollectionUtils.isEqualCollection(collA, collB);
I/O
IOUtils对IO操作的封装:
// 拷贝流IOUtils.copy(InputStream input, OutputStream output);// 从流中读取内容,转为listList<String> line = IOUtils.readLines(InputStream input, Charset encoding);
FileUtils对文件操作类的封装:
File file = new File("/show/data.text");// 按行读取文件List<String> lines = FileUtils.readLines(file, "UTF-8");// 将字符串写入文件FileUtils.writeStringToFile(file, "test", "UTF-8");// 文件复制FileUtils.copyFile(srcFile, destFile);
Lang
StringUtils 以下断言测试通过:
// isEmpty的实现 cs == null || cs.length() == 0; return trueassertEquals(true, StringUtils.isEmpty(""));
assertEquals(true, StringUtils.isBlank(null));assertEquals(true, StringUtils.isBlank(""));// 空格assertEquals(true, StringUtils.isBlank(" "));// 回车assertEquals(true, StringUtils.isBlank(" "));
Pair和Triple
当想返回2个或3个值,但这几个值没有相关性,没有必要单独封装一个对象,就可以用到如下数据结构,返回Pair或Triple对象:
Pair<Integer, Integer> pair = new ImmutablePair<>(1, 2);// 1 2System.out.println(pair.getLeft() + " " + pair.getRight());Triple<Integer, Integer, Integer> triple = new ImmutableTriple<>(1,2,3);// 1 2 3System.out.println(triple.getLeft() + " " + triple.getMiddle() + " " + triple.getRight());
Google Guava
集合的创建
// 普通集合的创建List<String> list = Lists.newArrayList();Set<String> set = Sets.newHashSet();
// 不可变集合的创建ImmutableList<String> list = ImmutableList.of("a", "b", "c");ImmutableSet<String> set = ImmutableSet.of("a", "b");
不可变集合是线程安全的,并且中途不可改变,因为add等方法是被声明为过期,并且会抛出异常:
public final void add(int index, E element) { throw new UnsupportedOperationException();}
各种黑科技集合
// use javaMap<String, List<Integer>> map = new HashMap<String, List<Integer>>();// use guavaMultimap<String, Integer> map = ArrayListMultimap.create();map.put("key1", 1);map.put("key1", 2);// [1, 2]System.out.println(map.get("key1"));
2个键映射一个值
Table<String, String, Integer> table = HashBasedTable.create();table.put("a", "a", 1);table.put("a", "b", 2);// 2System.out.println(table.get("a", "b"));
还有很多其他各种类型的集合,不再介绍。
stop watch
查看某段代码的运行时间:
Stopwatch stopwatch = Stopwatch.createStarted();// do somethinglong second = stopwatch.elapsed(TimeUnit.SECONDS);
TimeUnit 可以指定时间精度。
Joda Time
jdk1.8之前,日期操作类常用的只有java.util.Date和java.util.Calendar,但是这2个类的易用性实在太差了,SimpleDateFormat不是线程安全的 。这就逼迫用户去选择第三方的日期操作类,Joda Time就是其中的佼佼者。后来Java自身也意识到了这个问题,于是jdk1.8大量借鉴了Joda Time的理念,推出了新的日期api,LocalDate、LocalTime、LocalDateTime等,可以看如下文章了解一下用法:https://blog.csdn.net/zzti_erlie/article/details/100849192
两者的api很相似,如果公司的jdk版本在1.8以上推荐使用jdk1.8新推出的日期类,如果在1.8以下推荐使用Joda Time。
Apache Httpcomponents
很多http工具类都是用Apache Httpcomponents封装的,内容比较多,后续会单开一篇文章。
参考博客
《Java工程师修炼之道》
Google guava工具类的使用
版权声明:本文为CSDN博主「Java识堂」的原创文章版权归作者所有。
技术的道路一个人走着极为艰难?
一身的本领得不施展?
优质的文章得不到曝光?
别担心,
即刻起,CSDN 将为你带来创新创造创变展现的大舞台,
扫描下方二维码,欢迎加入 CSDN 「原力计划」!
热 文 推 荐
☞网易裁员事件双方和解;华为回应「推文攻击苹果」;PHP 7.4.0 发布 | 极客头条
☞20 个最常用的 Git 命令用法说明及示例
☞震惊!雷军表示要出千元5G手机!
☞自学编程、玩 vlog,90 后程序员们的冠军之路
☞警惕!程序员万字揭露被空姐骗到香港做传销的来龙去脉!
☞【经典必看】14个实用的数据库设计技巧
☞贾扬清:为什么说数据智能和云原生之间是“天作之合”?
☞大白话讲解比特币白皮书,十年后它依然是学习区块链的最佳资料,你真的读懂了吗?
点击阅读原文参与开发者大调查,好礼送不停!
你点的每个“在看”,我都认真当成了喜欢
Java 那些最常用的工具类库 | 原力计划相关推荐
- 涨知识!Google 黑客常用搜索语句一览 | 原力计划
作者 | admin-root 责编 | 郭芮 出品 | CSDN博客 通过这些搜索语句你可以搜索到想要的任何东西,一条一条试总会有惊喜哦~~如果你还有其他更好的语句欢迎补充! inurl:Login ...
- 看我发现了什么好东西? Java Optional,绝对值得一学 | 原力计划
作者 | 沉默王二 来源 | CSDN博客 头图 | 付费下载自视觉中国 出品 | CSDN(ID:CSDNnews) 想学习,永远都不晚,尤其是针对 Java 8 里面的好东西,Optional 就 ...
- 原力计划第4周榜单揭晓!
10月24日,CSDN发布了"原力计划"活动,CSDN博主可报名参与"CSDN原力计划英雄榜",每周会公布"CSDN'原力计划'英雄榜"结果 ...
- 如何用 Python 画一个纸飞机?| 原力计划
[CSDN编者按]如果你是一个80后,可能对于卓依婷的歌曲<纸飞机>并不陌生.歌词里说:"飞在风里的纸飞机,载满我对你的情和意.飞到那思念的另一边,诉说我心中的痴迷." ...
- [项目过程中所遇到的各种问题记录]工具篇——.NET开发时常用的工具类库
在日常开发的过程当中我们总是会根据项目的开发需求将一些公用的类或者方法进行抽象封装,这些类或方法的抽象封装可能是基于某个项目或者多个项目,最常见的应该就是SQLHelper了,这些类库在实际使用的过程 ...
- JAVA 开发中常用的工具有哪些?
Java开发中常用的工具有以下几种: Eclipse:一款非常流行的开发工具,提供了很多方便的功能,如代码自动补全.调试.版本控制等. IntelliJ IDEA:一款功能强大的Java集成开发环境, ...
- java web 项目 常用 小工具类 ~~~~
java web 项目 常用 小工具类 ~~~~ 一 .DateUtil 日期工具类 package com.devframe.common.util;import java.text.Simple ...
- 找不到libmmd.dll无法继续执行代码_300 行代码带你秒懂 Java 多线程!| 原力计划...
作者 | 永远在路上[] 责编 | 胡巍巍 出品 | CSDN博客 线程线程的概念,百度是这样解释的:线程(英语:Thread)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际 ...
- 300 行代码带你秒懂 Java 多线程!| 原力计划
作者 | 永远在路上[] 责编 | 胡巍巍 出品 | CSDN博客 线程 线程的概念,百度是这样解释的: 线程(英语:Thread)是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的 ...
最新文章
- random类的使用
- 综述:如何给模型加入先验知识
- stand up meeting 12/24/2015 end sprint1
- CodeForces - 351E Jeff and Permutation(贪心)
- 在ubuntu上如何将多张图片或PDF合到一个PDF上
- python爬取新闻网站内容_python爬虫案例:抓取网易新闻
- POI导出EXCEL设置高度和宽度
- Android应用开发-图片加载库Glide
- java中一个引人深思的匿名内部类
- Navicat连接CentOS7中的MariaDB
- hive Beeline plus HiveServer2简单使用
- 机器视觉笔记:RANSAC算法以及思想
- opencv-图像平滑处理
- elasticsearch 支持中英文搜索和混合搜索
- SQL中COUNT的用法
- TensorFlow2.0-GPU加速
- cordova下使用高德地图js api在4g流量下定位失败问题的解决
- 智能车入门——‘教程引导’ <新手从零做车>
- python 连接数据库导数_python – 使用MongoDB聚合框架计算一阶导数
- 加速媒体业务智能化升级 第四范式发布智能推荐系统先荐
热门文章
- 研究生计划 三
- [SQL Server]关于15517号错误的一点想法
- 《Linux编程》上机作业 ·005【进程管理与通信】
- 《编码规范和测试方法——C/C++版》作业 ·008——编写一个符合依赖倒置原则的简单学生管理系统
- 前端开发~H5 ·学习笔记 ·001——【HTML介绍、常用HTML标签】
- 论文翻译:Real-Time High-Resolution Background Matting
- leetcode python3 简单题14. Longest Common Prefix
- leetcode 题库1028--从先序遍历还原二叉树
- 记录——《C Primer Plus (第五版)》第九章编程练习第六题
- Dart云平台-DartPad