常用的 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天前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
466 1
|
6月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
1211 103
|
13天前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
158 4
|
20天前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
548 8
|
6月前
|
监控 Java Unix
6个Java 工具,轻松分析定位 JVM 问题 !
本文介绍了如何使用 JDK 自带工具查看和分析 JVM 的运行情况。通过编写一段测试代码(启动 10 个死循环线程,分配大量内存),结合常用工具如 `jps`、`jinfo`、`jstat`、`jstack`、`jvisualvm` 和 `jcmd` 等,详细展示了 JVM 参数配置、内存使用、线程状态及 GC 情况的监控方法。同时指出了一些常见问题,例如参数设置错误导致的内存异常,并通过实例说明了如何排查和解决。最后附上了官方文档链接,方便进一步学习。
755 4
|
5月前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
200 0
|
4月前
|
Java 数据安全/隐私保护 计算机视觉
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本内容提供Java生成自定义图片的示例代码,涵盖基础图像创建、文本添加及保存功能,适合学习2D图形编程。包括教学示例图片生成、文本图层处理和数字水印技术实现方案。
|
4月前
|
安全 Java 编译器
JD-GUI,java反编译工具及原理: JavaDecompiler一个Java反编译器
Java Decompiler (JD-GUI) 是一款由 Pavel Kouznetsov 开发的图形化 Java 反编译工具,支持 Windows、Linux 和 Mac Os。它能将 `.class` 文件反编译为 Java 源代码,支持多文件标签浏览、高亮显示,并兼容 Java 5 及以上版本。JD-GUI 支持对整个 Jar 文件进行反编译,可跳转源码,适用于多种 JDK 和编译器。其原理基于将字节码转换为抽象语法树 (AST),再通过反编译生成代码。尽管程序可能带来安全风险,但可通过代码混淆降低可读性。最新版修复了多项识别错误并优化了内存管理。
2208 1
|
11月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
219 9
|
4月前
|
Java 数据安全/隐私保护
银行转账虚拟生成器app,银行卡转账截图制作软件,java实现截图生成工具【仅供装逼娱乐用途】
本项目提供了一套基于Java的图片处理教学方案,包含自定义图片生成、图像水印添加及合法电子凭证生成技术示例。