当前位置: 首页 > 科技观察

Java界常用的工具类库

时间:2023-03-15 15:18:02 科技观察

Java界有很多好用的工具类框架。今天我们将介绍三个最常用的框架。实用工具很多,没有全部列出来,只列出最基本的部分。感兴趣的朋友,可以看官方的api更深入的学习。ApacheCommonsApacheCommons有很多子项目,常用的项目如下:BeanUtils提供了对javabean的一系列操作,读取和设置属性值等@DatapublicclassUser{privateStringusername;privateStringpassword;}Useruser=newUser();BeanUtils。setProperty(user,"username","li");BeanUtils.getProperty(user,"username");Map和bean的转换://bean->mapMapma??p=BeanUtils.describe(user);//map->beanBeanUtils.populate(user,map);我们通常使用redis中的hash将对象放入缓存中,如下:#setuser信息hsetstudentnametestthsetstudentage10对于这种场景下map和bean的转换特别有用。Codec常用编解码方式封装://Base64Base64.encodeBase64String(byte[]binaryData)Base64.decodeBase64(Stringbase64String)//MD5DigestUtils.md5Hex(Stringdata)//URLCodec.decodeUrl(byte[]bytes);URLCodec.encodeUrl(BitSeturlsafe,byte[]bytes);Collections交集与差集操作://空判断CollectionUtils.isEmpty(collA);//交集CollectionUtils.retainAll(collA,collB);//UnionCollectionUtils.union(collA,collB);//差集CollectionUtils.subtract(collA,collB);//判断collectionUtils.isEqualCollection(collA,collB);I/OIOUtils对IO操作的封装//CopystreamIOUtils.copy(InputStreaminput,OutputStreamoutput);//从流中读取内容并转换为listListline=IOUtils.readLines(InputStreaminput,Charsetencoding);FileUtils的封装文件操作类Filefile=newFile("/show/data.text");//按行读取文件Listlines=FileUtils.readLines(file,"UTF-8");//写入字符串到文件FileUtils.writeStringToFile(file,"test","UTF-8");//文件复制FileUtils.copyFile(srcFile,destFile);LangStringUtils下面断言测试通过//isEmpty实现cs==null||cs.length()==0;returntrueassertEquals(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对象Pairpair=newImmutablePair<>(1,2);//12System.out.println(pair.getLeft()+""+pair.getRight());Tripletriple=newImmutableTriple<>(1,2,3);//123System.out.println(triple.getLeft()+""+triple.getMiddle()+""+triple.getRight());GoogleGuava集合的创建//普通集合的创建Listlist=Lists.newArrayList();Setset=Sets.newHashSet();//创建不可变集合ImmutableListlist=ImmutableList.of("a","b","c");ImmutableSetset=ImmutableSet.of("a","b");不可变集合是线程安全的,不能中途更改,因为add等方法声明过期,会抛出异常//普通集合的创建Listlist=Lists.newArrayList();Setset=Sets.newHashSet();//不可变集合的创建ImmutableListlist=ImmutableList.of("a","b","c");ImmutableSetset=ImmutableSet.of("a","b");各种黑科技合集//usejavaMap>map=newHashMap>();//useguavaMultimapmap=ArrayListMultimap.create();map.put("key1",1);map.put("key1",2);//[1,2]System.out.println(map.get("key1"));2个键映射一个值Tabletable=HashBasedTable.create();table.put("a","a",1);table.put("a","b",2);//2System.out.println(table.get("a","b"));A集合还有很多其他类型,不再介绍。stopwatch查看某段代码运行时间Stopwatchstopwatch=Stopwatch.createStarted();//dosomethinglongsecond=stopwatch.elapsed(TimeUnit.SECONDS);TimeUnit可以指定时间精度在JodaTimejdk1.8之前,日期操作类只有java.util.Date和java.util.Calendar常用,但这两个类的易用性真的很差,SimpleDateFormat不是thread-安全的。这迫使用户选择第三方日期操作类,而JodaTime是最好的之一。两者的API非常相似。如果公司的jdk版本在1.8以上,建议使用jdk1.8新推出的日期类,如果是1.8以下,建议使用JodaTime。