常用的 Java 工具库

简介:   工作很多年后,才发现有很多工具类库,可以大大简化代码量,提升开发效率,初级开发者却不知道。而这些类库早就成为了业界标准类库,大公司的内部也都在使用,如果刚工作的时候就有人告诉我使用这些工具类库,该多好!  一块看一下有哪些工具类库你也用过。  1. Java自带工具方法1.1 List集合拼接成以逗号分隔的字符串  // 如何把list集合拼接成以逗号分隔的字符串 a,b,c  List list=Arrays.asList("a", "b", "c");  // 第一种方法,可以用stream流  String join=list.stream.collect(C

  工作很多年后,才发现有很多工具类库,可以大大简化代码量,提升开发效率,初级开发者却不知道。而这些类库早就成为了业界标准类库,大公司的内部也都在使用,如果刚工作的时候就有人告诉我使用这些工具类库,该多好!

  一块看一下有哪些工具类库你也用过。

  1. Java自带工具方法1.1 List集合拼接成以逗号分隔的字符串

  // 如何把list集合拼接成以逗号分隔的字符串 a,b,c

  List list=Arrays.asList("a", "b", "c");

  // 第一种方法,可以用stream流

  String join=list.stream.collect(Collectors.joining(","));

  System.out.println(join); // 输出 a,b,c

  // 第二种方法,其实String也有join方法可以实现这个功能

  String join=String.join(",", list);

  System.out.println(join); // 输出 a,b,c

  1.2 比较两个字符串是否相等,忽略大小写

  if (strA.equalsIgnoreCase(strB)) {

  System.out.println("相等");

  }

  1.3 比较两个对象是否相等

  当我们用equals比较两个对象是否相等的时候,还需要对左边的对象进行判空,不然可能会报空指针异常,我们可以用java.util包下Objects封装好的比较是否相等的方法

  Objects.equals(strA, strB);

  源码是这样的

  publicstaticbooleanequals(Object a, Object b) {

  return (a==b) || (a !=&& a.equals(b));

  }

  1.4 两个List集合取交集

  List list1=new ArrayList<>;

  list1.add("a");

  list1.add("b");

  list1.add("c");

  List list2=new ArrayList<>;

  list2.add("a");

  list2.add("b");

  list2.add("d");

  list1.retainAll(list2);

  System.out.println(list1); // 输出[a, b]

  2. apache commons工具类库

  apache commons是最强大的,也是使用最广泛的工具类库,里面的子库非常多,下面介绍几个最常用的

  2.1 commons-lang,java.lang的增强版

  建议使用commons-lang3,优化了一些api,原来的commons-lang已停止更新

  Maven依赖是:

  

  org.apache.commons

  commons-lang3

  3.12.0

  

  2.1.1 字符串判空

  传参CharSequence类型是String、StringBuilder、StringBuffer的父类,都可以直接下面方法判空,以下是源码:

  publicstaticbooleanisEmpty(final CharSequence cs) {

  return cs == || cs.length == 0;

  }

  publicstaticbooleanisNotEmpty(final CharSequence cs) {

  return !isEmpty(cs);

  }

  // 判空的时候,会去除字符串中的空白字符,比如空格、换行、制表符

  publicstaticbooleanisBlank(final CharSequence cs) {

  final int strLen = length(cs);

  if (strLen == 0) {

  return true;

  }

  for (int i = 0; i < strLen; i++) {

  if (!Character.isWhitespace(cs.charAt(i))) {

  return false;

  }

  }

  return true;

  }

  publicstaticbooleanisNotBlank(final CharSequence cs) {

  return !isBlank(cs);

  }

  2.1.2 首字母转成大写

  String str="yideng";

  String capitalize=StringUtils.capitalize(str);

  System.out.println(capitalize); // 输出Yideng

  2.1.3 重复拼接字符串

  String str=StringUtils.repeat("ab", 2);

  System.out.println(str); // 输出abab

  2.1.4 格式化日期

  再也不用手写SimpleDateFormat格式化了

  // Date类型转String类型

  String date=DateFormatUtils.format(new Date, "yyyy-MM-dd HH:mm:ss");

  System.out.println(date); // 输出 2021-05-01 01:01:01

  // String类型转Date类型

  Date date=DateUtils.parseDate("2021-05-01 01:01:01", "yyyy-MM-dd HH:mm:ss");

  // 计算一个小时后的日期

  Date date=DateUtils.addHours(new Date, 1);

  2.1.5 包装临时对象

  当一个方法需要返回两个及以上字段时,我们一般会封装成一个临时对象返回,现在有了Pair和Triple就不需要了

  // 返回两个字段

  ImmutablePair pair=ImmutablePair.of(1, "yideng");

  System.out.println(pair.getLeft + "," + pair.getRight); // 输出 1,yideng

  // 返回三个字段

  ImmutableTriple triple=ImmutableTriple.of(1, "yideng", new Date);

  System.out.println(triple.getLeft + "," + triple.getMiddle + "," + triple.getRight); // 输出 1,yideng,Wed Apr 07 23:30:00 CST 2021

  2.2 commons-collections 集合工具类

  Maven依赖是:

  

  org.apache.commons

  commons-collections4

  4.4

  

  2.2.1 集合判空

  封装了集合判空的方法,以下是源码:

  publicstaticbooleanisEmpty(final Collection coll) {

  return coll==|| coll.isEmpty;

  }

  publicstaticbooleanisNotEmpty(final Collection coll) {

  return !isEmpty(coll);

  }

  // 两个集合取交集

  Collection collection=CollectionUtils.retainAll(listA, listB);

  // 两个集合取并集

  Collection collection=CollectionUtils.union(listA, listB);

  // 两个集合取差集

  Collection collection=CollectionUtils.subtract(listA, listB);

  2.3 common-beanutils 操作对象

  Maven依赖:

  

  commons-beanutils

  commons-beanutils

  1.9.4

  

  public class User {

  private Integer id;

  private String name;

  }

  设置二手出售平台对象属性

  User user=new User;

  BeanUtils.setProperty(user, "id", 1);

  BeanUtils.setProperty(user, "name", "yideng");

  System.out.println(BeanUtils.getProperty(user, "name")); // 输出 yideng

  System.out.println(user); // 输出 {"id":1,"name":"yideng"}

  对象和map互转

  // 对象转map

  Map map=BeanUtils.describe(user);

  System.out.println(map); // 输出 {"id":"1","name":"yideng"}

  // map转对象

  User newUser=new User;

  BeanUtils.populate(newUser, map);

  System.out.println(newUser); // 输出 {"id":1,"name":"yideng"}

  2.4 commons-io 文件流处理

  Maven依赖:

  

  commons-io

  commons-io

  2.8.0

  

  文件处理

  File file=new File("demo1.txt");

  // 读取文件

  List lines=FileUtils.readLines(file, Charset.defaultCharset);

  // 写入文件

  FileUtils.writeLines(new File("demo2.txt"), lines);

  // 复制文件

  FileUtils.copyFile(srcFile, destFile);

  3. Google Guava 工具类库

  Maven依赖:

  

  com.google.guava

  guava

  30.1.1-jre

  

  3.1 创建集合

  List list=Lists.newArrayList;

  List list=Lists.newArrayList(1, 2, 3);

  // 反转list

  List reverse=Lists.reverse(list);

  System.out.println(reverse); // 输出 [3, 2, 1]

  // list集合元素太多,可以分成若干个集合,每个集合10个元素

  List> partition=Lists.partition(list, 10);

  Map map=Maps.newHashMap;

  Set set=Sets.newHashSet;

  3.2 黑科技集合

  3.2.1 Multimap 一个key可以映射多个value的HashMap

  Multimap map=ArrayListMultimap.create;

  map.put("key", 1);

  map.put("key", 2);

  Collection values=map.get("key");

  System.out.println(map); // 输出 {"key":[1,2]}

  // 还能返回你以前使用的臃肿的Map

  Map> collectionMap=map.asMap;

  多省事,多简洁,省得你再创建 Map

  3.2.2 BiMap 一种连value也不能重复的HashMap

  BiMap biMap=HashBiMap.create;

  // 如果value重复,put方法会抛异常,除非用forcePut方法

  biMap.put("key","value");

  System.out.println(biMap); // 输出 {"key":"value"}

  // 既然value不能重复,何不实现个翻转key/value的方法,已经有了

  BiMap inverse=biMap.inverse;

  System.out.println(inverse); // 输出 {"value":"key"}

  这其实是双向映射,在某些场景还是很实用的。

  3.2.3 Table 一种有两个key的HashMap

  // 一批用户,同时按年龄和性别分组

  Table table=HashBasedTable.create;

  table.put(18, "男", "yideng");

  table.put(18, "女", "Lily");

  System.out.println(table.get(18, "男")); // 输出 yideng

  // 这其实是一个二维的Map,可以查看行数据

  Map row=table.row(18);

  System.out.println(row); // 输出 {"男":"yideng","女":"Lily"}

  // 查看列数据

  Map column=table.column("男");

  System.out.println(column); // 输出 {18:"yideng"}

  3.2.4 Multiset 一种用来计数的Set

  Multiset multiset=HashMultiset.create;

  multiset.add("apple");

  multiset.add("apple");

  multiset.add("orange");

  System.out.println(multiset.count("apple")); // 输出 2

  // 查看去重的元素

  Set set=multiset.elementSet;

  System.out.println(set); // 输出 ["orange","apple"]

  // 还能查看没有去重的元素

  Iterator iterator=multiset.iterator;

  while (iterator.hasNext) {

  System.out.println(iterator.next);

  }

  // 还能手动设置某个元素出现的次数

  multiset.setCount("apple", 5);

  以上为个人经验,希望能给大家一个参考,如有错误或未考虑完全的地方,望不吝赐教。

目录
相关文章
|
21天前
|
监控 Java 测试技术
Java开发现在比较缺少什么工具?
【10月更文挑战第15天】Java开发现在比较缺少什么工具?
31 1
|
7天前
|
Java API Apache
|
13天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
13天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
16天前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
|
1月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
35 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
23天前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
在Java中处理JSON数据:Jackson与Gson库比较
|
27天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
35 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
28天前
|
Java C++
做了个Java打包工具,可以双击启动了!
本文介绍了作者日常使用Java和Swing进行开发的经验,以及Java程序分发时遇到的问题,如需要JRE环境。文中列举了几种常见的Java程序打包方法,并对比了各自的优缺点,最后作者结合这些方案,利用Winform开发了一款工具,将Java程序打包成二进制可执行文件,简化了分发流程。
做了个Java打包工具,可以双击启动了!
|
1月前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
32 2
下一篇
无影云桌面