修改日期 | 修改人 | 备注 |
2020-03-27 15:00:29[当前版本] | 系统管理员 | 格式调整 |
2020-03-27 14:59:55 | 系统管理员 | 创建版本 |
转载 小旋锋 最后发布于2018-08-30 21:53:20 阅读数 25292 收藏
发布于2018-08-30 21:53:20
分类专栏: 后端
文章标签: guava
展开
工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。所以就诞生了guava。
guava的优点:
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:
引入gradle依赖(引入Jar包)
compile 'com.google.guava:guava:26.0-jre'
// 普通Collection的创建 List<String> list = Lists.newArrayList(); Set<String> set = Sets.newHashSet(); Map<String, String> map = Maps.newHashMap(); // 不变Collection的创建 ImmutableList<String> iList = ImmutableList.of("a", "b", "c"); ImmutableSet<String> iSet = ImmutableSet.of("e1", "e2"); ImmutableMap<String, String> iMap = ImmutableMap.of("k1", "v1", "k2", "v2");
创建不可变集合 先理解什么是immutable(不可变)对象
ImmutableList<String> immutableList = ImmutableList.of("1","2","3","4");
这声明了一个不可变的List集合,List中有数据1,2,3,4。类中的 操作集合的方法(譬如add, set, sort, replace等)都被声明过期,并且抛出异常。 而没用guava之前是需要声明并且加各种包裹集合才能实现这个功能
// add 方法 @Deprecated @Override public final void add(int index, E element) { throw new UnsupportedOperationException(); }
当我们需要一个map中包含key为String类型,value为List类型的时候,以前我们是这样写的
Map<String,List<Integer>> map = new HashMap<String,List<Integer>>(); List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); map.put("aa", list); System.out.println(map.get("aa"));//[1, 2]
而现在
Multimap<String,Integer> map = ArrayListMultimap.create(); map.put("aa", 1); map.put("aa", 2); System.out.println(map.get("aa")); //[1, 2]
其他的黑科技集合
MultiSet: 无序+可重复 count()方法获取单词的次数 增强了可读性+操作简单 创建方式: Multiset<String> set = HashMultiset.create(); Multimap: key-value key可以重复 创建方式: Multimap<String, String> teachers = ArrayListMultimap.create(); BiMap: 双向Map(Bidirectional Map) 键与值都不能重复 创建方式: BiMap<String, String> biMap = HashBiMap.create(); Table: 双键的Map Map--> Table-->rowKey+columnKey+value //和sql中的联合主键有点像 创建方式: Table<String, String, Integer> tables = HashBasedTable.create(); ...等等(guava中还有很多java里面没有给出的集合类型)
以前我们将list转换为特定规则的字符串是这样写的:
//use java List<String> list = new ArrayList<String>(); list.add("aa"); list.add("bb"); list.add("cc"); String str = ""; for(int i=0; i<list.size(); i++){ str = str + "-" +list.get(i); } //str 为-aa-bb-cc //use guava List<String> list = new ArrayList<String>(); list.add("aa"); list.add("bb"); list.add("cc"); String result = Joiner.on("-").join(list); //result为 aa-bb-cc
把map集合转换为特定规则的字符串
Map<String, Integer> map = Maps.newHashMap(); map.put("xiaoming", 12); map.put("xiaohong",13); String result = Joiner.on(",").withKeyValueSeparator("=").join(map); // result为 xiaoming=12,xiaohong=13
//use java List<String> list = new ArrayList<String>(); String a = "1-2-3-4-5-6"; String[] strs = a.split("-"); for(int i=0; i<strs.length; i++){ list.add(strs[i]); } //use guava String str = "1-2-3-4-5-6"; List<String> list = Splitter.on("-").splitToList(str); //list为 [1, 2, 3, 4, 5, 6]
如果
str="1-2-3-4- 5- 6 ";
guava还可以使用omitEmptyStrings().trimResults()去除空串与空格
String str = "1-2-3-4- 5- 6 "; List<String> list = Splitter.on("-").omitEmptyStrings().trimResults().splitToList(str); System.out.println(list);
将String转换为map
String str = "xiaoming=11,xiaohong=23"; Map<String,String> map = Splitter.on(",").withKeyValueSeparator("=").split(str);
String input = "aa.dd,,ff,,."; List<String> result = Splitter.onPattern("[.|,]").omitEmptyStrings().splitToList(input);
关于字符串的操作 都是在Splitter这个类上进行的
// 判断匹配结果 boolean result = CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z')).matches('K'); //true // 保留数字文本 CharMatcher.digit() 已过时 retain 保留 //String s1 = CharMatcher.digit().retainFrom("abc 123 efg"); //123 String s1 = CharMatcher.inRange('0', '9').retainFrom("abc 123 efg"); // 123 // 删除数字文本 remove 删除 // String s2 = CharMatcher.digit().removeFrom("abc 123 efg"); //abc efg String s2 = CharMatcher.inRange('0', '9').removeFrom("abc 123 efg"); // abc efg
我们对于集合的过滤,思路就是迭代,然后再具体对每一个数判断,这样的代码放在程序中,难免会显得很臃肿,虽然功能都有,但是很不好看。
guava写法
//按照条件过滤 ImmutableList<String> names = ImmutableList.of("begin", "code", "Guava", "Java"); Iterable<String> fitered = Iterables.filter(names, Predicates.or(Predicates.equalTo("Guava"), Predicates.equalTo("Java"))); System.out.println(fitered); // [Guava, Java] //自定义过滤条件 使用自定义回调方法对Map的每个Value进行操作 ImmutableMap<String, Integer> m = ImmutableMap.of("begin", 12, "code", 15); // Function<F, T> F表示apply()方法input的类型,T表示apply()方法返回类型 Map<String, Integer> m2 = Maps.transformValues(m, new Function<Integer, Integer>() { public Integer apply(Integer input) { if(input>12){ return input; }else{ return input+1; } } }); System.out.println(m2); //{begin=13, code=15}
set的交集, 并集, 差集
HashSet setA = newHashSet(1, 2, 3, 4, 5); HashSet setB = newHashSet(4, 5, 6, 7, 8); SetView union = Sets.union(setA, setB); System.out.println("union:"); for (Integer integer : union) System.out.println(integer); //union 并集:12345867 SetView difference = Sets.difference(setA, setB); System.out.println("difference:"); for (Integer integer : difference) System.out.println(integer); //difference 差集:123 SetView intersection = Sets.intersection(setA, setB); System.out.println("intersection:"); for (Integer integer : intersection) System.out.println(integer); //intersection 交集:45
map的交集,并集,差集
HashMap<String, Integer> mapA = Maps.newHashMap(); mapA.put("a", 1);mapA.put("b", 2);mapA.put("c", 3); HashMap<String, Integer> mapB = Maps.newHashMap(); mapB.put("b", 20);mapB.put("c", 3);mapB.put("d", 4); MapDifference differenceMap = Maps.difference(mapA, mapB); differenceMap.areEqual(); Map entriesDiffering = differenceMap.entriesDiffering(); Map entriesOnlyLeft = differenceMap.entriesOnlyOnLeft(); Map entriesOnlyRight = differenceMap.entriesOnlyOnRight(); Map entriesInCommon = differenceMap.entriesInCommon(); System.out.println(entriesDiffering); // {b=(2, 20)} System.out.println(entriesOnlyLeft); // {a=1} System.out.println(entriesOnlyRight); // {d=4} System.out.println(entriesInCommon); // {c=3}
//use java if(list!=null && list.size()>0) ''' if(str!=null && str.length()>0) ''' if(str !=null && !str.isEmpty()) //use guava if(!Strings.isNullOrEmpty(str)) //use java if (count <= 0) { throw new IllegalArgumentException("must be positive: " + count); } //use guava Preconditions.checkArgument(count > 0, "must be positive: %s", count);
免去了很多麻烦!并且会使你的代码看上去更好看。而不是代码里面充斥着!=null,!=""
检查是否为空,不仅仅是字符串类型,其他类型的判断,全部都封装在 Preconditions类里,里面的方法全为静态
其中的一个方法的源码
@CanIgnoreReturnValue public static <T> T checkNotNull(T reference) { if (reference == null) { throw new NullPointerException(); } return reference; }
方法声明(不包括额外参数) | 描述 | 检查失败时抛出的异常 |
---|---|---|
checkArgument(boolean) | 检查boolean是否为true,用来检查传递给方法的参数。 | IllegalArgumentException |
checkNotNull(T) | 检查value是否为null,该方法直接返回value,因此可以内嵌使用checkNotNull。 | NullPointerException |
checkState(boolean) | 用来检查对象的某些状态。 | IllegalStateException |
checkElementIndex(int index, int size) | 检查index作为索引值对某个列表、字符串或数组是否有效。 index > 0 && index < size | IndexOutOfBoundsException |
checkPositionIndexes(int start, int end, int size) | 检查[start,end]表示的位置范围对某个列表、字符串或数组是否有效 | IndexOutOfBoundsException |
这个方法是在Objects过期后官方推荐使用的替代品,该类最大的好处就是不用大量的重写toString,用一种很优雅的方式实现重写,或者在某个场景定制使用。
Person person = new Person("aa",11); String str = MoreObjects.toStringHelper("Person").add("age", person.getAge()).toString(); System.out.println(str); //输出Person{age=11}
排序器[Ordering]是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。
natural() 对可排序类型做自然排序,如数字按大小,日期按先后排序 usingToString() 按对象的字符串形式做字典排序[lexicographical ordering] from(Comparator) 把给定的Comparator转化为排序器 reverse() 获取语义相反的排序器 nullsFirst() 使用当前排序器,但额外把null值排到最前面。 nullsLast() 使用当前排序器,但额外把null值排到最后面。 compound(Comparator) 合成另一个比较器,以处理当前排序器中的相等情况。 lexicographical() 基于处理类型T的排序器,返回该类型的可迭代对象Iterable<T>的排序器。 onResultOf(Function) 对集合中元素调用Function,再按返回值用当前排序器排序。
示例
Person person = new Person("aa",14); //String name ,Integer age Person ps = new Person("bb",13); Ordering<Person> byOrdering = Ordering.natural().nullsFirst().onResultOf(new Function<Person,String>(){ public String apply(Person person){ return person.age.toString(); } }); byOrdering.compare(person, ps); System.out.println(byOrdering.compare(person, ps)); //1 person的年龄比ps大 所以输出1
Stopwatch stopwatch = Stopwatch.createStarted(); for(int i=0; i<100000; i++){ // do some thing } long nanos = stopwatch.elapsed(TimeUnit.MILLISECONDS); System.out.println(nanos);
TimeUnit 可以指定时间输出精确到多少时间
以前我们写文件读取的时候要定义缓冲区,各种条件判断,各种$%#$@#
而现在我们只需要使用好guava的api 就能使代码变得简洁,并且不用担心因为写错逻辑而背锅了
File file = new File("test.txt"); List<String> list = null; try { list = Files.readLines(file, Charsets.UTF_8); } catch (Exception e) { } Files.copy(from,to); //复制文件 Files.deleteDirectoryContents(File directory); //删除文件夹下的内容(包括文件与子文件夹) Files.deleteRecursively(File file); //删除文件或者文件夹 Files.move(File from, File to); //移动文件 URL url = Resources.getResource("abc.xml"); //获取classpath根下的abc.xml文件url
Files类中还有许多方法可以用,可以多多翻阅
guava的缓存设计的比较巧妙,可以很精巧的使用。guava缓存创建分为两种,一种是CacheLoader,另一种则是callback方式
CacheLoader:
LoadingCache<String,String> cahceBuilder=CacheBuilder .newBuilder() .build(new CacheLoader<String, String>(){ @Override public String load(String key) throws Exception { String strProValue="hello "+key+"!"; return strProValue; } }); System.out.println(cahceBuilder.apply("begincode")); //hello begincode! System.out.println(cahceBuilder.get("begincode")); //hello begincode! System.out.println(cahceBuilder.get("wen")); //hello wen! System.out.println(cahceBuilder.apply("wen")); //hello wen! System.out.println(cahceBuilder.apply("da"));//hello da! cahceBuilder.put("begin", "code"); System.out.println(cahceBuilder.get("begin")); //code
api中已经把apply声明为过期,声明中推荐使用get方法获取值
callback方式:
Cache<String, String> cache = CacheBuilder.newBuilder().maximumSize(1000).build(); String resultVal = cache.get("code", new Callable<String>() { public String call() { String strProValue="begin "+"code"+"!"; return strProValue; } }); System.out.println("value : " + resultVal); //value : begin code!
以上只是guava使用的一小部分,guava是个大的工具类,第一版guava是2010年发布的,每一版的更新和迭代都是一种创新。
jdk的升级很多都是借鉴guava里面的思想来进行的。
代码可以在 https://github.com/whirlys/elastic-example/tree/master/guava 下载
细节请翻看 guava 文档 https://github.com/google/guava/wiki
参考:
Google guava工具类的介绍和使用
Guava工具类学习
更多内容请访问我的个人博客:http://laijianfeng.org/
打开微信扫一扫,关注【小旋锋】微信公众号,及时接收博文推送
小旋锋 博客专家
发布了181 篇原创文章 · 获赞 307 · 访问量 57万+
他的留言板 关注
展开阅读全文
Google Guava 中文指南 09-13 阅读数 1万+
温馨提示:Guava 中文指南的 GitHub 地址为 guava-guide,欢迎大家Star、Fork,纠错。Guava 中文指南 Guava 项目包含若干被 Google 的 Java 项目依... 博文 来自: CG国斌的博客
发表评论
添加代码片
还能输入1000个字符
Google Guava官方教程 中文版 05-08 阅读数 2010
这是第三篇翻译文章,这个文档有人已经翻译过。尝试在已翻译的基础上重新翻译原文wiki 别人译文... 博文 来自: 左手是诗,右手是代码。
Guava(瓜娃)学习笔记 04-13 阅读数 3万+
Guava(瓜娃)学习笔记Guava工程包含了若干被google的java项目广泛依赖的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitive... 博文 来自: 我是程序猿
[Guava] Google Guava 集合工具类 08-31 阅读数 197
Google Guava 集合工具类Guava中的集合方法扩展 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法。Guava沿着这些路线提供了更... 博文 来自: Yiyuery's NoteBooks
Google Guava工具类详解 06-21 阅读数 825
同样写给自己最好别忘了工具类的积累对我们日常工作中很重要,所以记录一下public class JoinTest { final List<String> list ... 博文 来自: weixin_39715061的博客
spring源码阅读环境(几分钟下载包) 11-09 阅读数 3万+
南南南南啊!简述:1.下载spring源码:2.安装gradle:3.构建源码:导入idea:简述:不能忍受慢(看到这里你就准备笑吧!!)其他大神的博客实在让我难受自己动手,下载spring,编译sp... 博文 来自: qq_40670946的博客
计算机考研,这样选学校才是正解 12-22 阅读数 3万+
写了一篇《启舰:对计算机专业来说学历真的重要吗?》,一时间N多同学咨询自身情况要不要考研,眼看有点Hold不住,索性又出了一篇《启舰:计算机专业有必要考研吗?》,结果,又有同学说:“我是渣渣二本,想考... 博文 来自: 启舰
Java知识体系最强总结(2020版) 12-18 阅读数 18万+
更新于2019-12-15 10:38:00本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编... 博文 来自: ThinkWon的博客
【管理系统课程设计】美少女手把手教你后台管理 11-19 阅读数 2万+
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码)1. 这是一个什么系统?1.1 学习后台管理系统的原因随着时代的变迁... 博文 来自: 程序媛乐园
c++制作的植物大战僵尸(开源项目) 01-10 阅读数 5万+
此游戏全部由本人自己制作完成。游戏大部分的素材来源于原版游戏素材,少部分搜集于网络,以及自己制作。 此游戏为同人游戏而且仅供学习交流使用,任何人未经授权,不得对本游戏进行更改、盗用等,否则后果自负。目... 博文 来自: 尔灵尔亿的博客
从入门到精通,Java学习路线导航(附学习资源) 09-16 阅读数 12万+
引言最近也有很多人来向我"请教",他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧。Java学习路线当然,这里... 博文 来自: java_sha的博客
Guava工具类使用总结 01-28 阅读数 624
Guava工具类学习一、概述 Guava是对Java API的补充,对Java开发中常用功能进行更优雅的实现,使得编码更加轻松,代码容易理解。Guava使用了多种设计模式,同时经过了很多测试,得... 博文 来自: sunzhengtaolz的博客
字节跳动视频编解码面经 11-20 阅读数 17万+
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。七月初内推了字节跳动的提前批,因为内... 博文 来自: ljh_shuai的博客
爬虫福利二 之 妹子图网MM批量下载 02-24 阅读数 28万+
爬虫福利一:27报网MM批量下载 点击看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成!目标网站:妹子图网环境:Python3.x相关第三方模块:requ... 博文 来自: Nick.Peng 的博客
使用Google Guava快乐编程 04-04 阅读数 54
目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava使用的认识以及在项目中的经验来给大家分享!正如标题所言,学习使用Google Guava可以让你快乐编程,写出优雅的JAV... 博文 来自: weixin_33842328的博客
python爬取+BI分析5000条内衣数据,发现妹子最爱这款文胸 12-18 阅读数 2万+
生活中我们经常会用python进行数据爬取,但是爬取简单分析难,很多人喜欢用echarts图表接口或者是python的第三方库进行数据可视化,甚至是用matlab,基本上都需要用代码实现,在数据展示上... 博文 来自: Leo的博客
Google Guava 中 BiMap 的使用方法 03-08 阅读数 405
1、Guava学习之BiMap https://www.iteblog.com/archives/501.html2、Guava学习笔记:Guava新增集合类型-Bimap http://www.cn... 博文 来自: HeatDeath的博客
60 个让程序员崩溃的瞬间,哈哈哈哈哈哈哈哈哈 12-18 阅读数 16万+
阅读本文大概需要 2.3333 分钟。前方高能,每一个程序员看完,你不笑死个人,你来找我,我自己看了好几遍,反正笑的停不下来,太特么有才了。1. 公司实习生找 Bug2....... 博文 来自: stormzhang的专栏
Nginx 软件层面加强Nginx性能优化的面试问答和解决方案 11-16 阅读数 9279
Nginx 软件层面加强Nginx性能优化的面试问答和解决方案去年我去爱卡汽车面试PHP,一轮和二轮面的都不错,在三轮面到Nginx的时候很多问题当时不知道怎么回答,确实没有深入学习过,花了一段时间的... 博文 来自: 汤神俱乐部
情人节来了,教你个用 Python 表白的技巧 02-12 阅读数 1万+
作者:@明哥公众号:Python编程时光2020年,这个看起来如此浪漫的年份,你还是一个人吗?难不成我还能是一条狗?18年的时候,写过一篇介绍如何使用 Python 来表白的文章。虽然创意和使用效果都... 博文 来自: 王炳明
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了 03-19 阅读数 58万+
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频... 博文 来自: 帅地
Google guava工具类的使用 09-15 阅读数 70
目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava使用的认识以及在项目中的经验来给大家分享!学习使用Google Guava可以让你快乐编程,写出优雅的JAVA代码!概述工... 博文 来自: weixin_39734304的博客
知乎人均985?Python爬50W数据,BI做出可视化后,我有了答案 12-19 阅读数 2万+
一次完整的python数据分析流程是怎么样的?使用python从网站抓取数据,并将这些数据保存到SQLite数据库中,然后对数据进行清洗,最后对数据进行数据可视化分析。可是熟悉的人应该知道,pytho... 博文 来自: Leo的博客
Nginx 之父被抓,程序员一定要警惕,背后的原因竟然是…… 12-16 阅读数 1万+
loonggg读完需要4分钟速读仅需2分钟最近 Nginx 之父,Igor Sysoev 被俄罗斯警方抓起来了。据 ZDNet 报道,俄罗斯警方在 12 日突击搜查了 NGINX 公司在...... 博文 来自: 非著名程序员
Guava用法总结 04-12 阅读数 6138
这里抛砖引玉列出Guava一些常用工具类,更多用法请自行挖掘。1. 缓存Guava Cache是一个全内存的本地缓存实现,它提供了线程安全的实现机制。 cache的常用参数: 1. 缓存最大大小的... 博文 来自: 家山的专栏
Spring Cloud入门操作手册(Hoxton) 10-29 阅读数 5万+
文章目录@[toc]spring cloud 介绍spring cloud 技术组成Spring Cloud 对比 Dubbo一、service - 服务二、commons 通用项目新建 maven ... 博文 来自: weixin_38305440的博客
写了很久,这是一份最适合/贴切普通大众/科班/非科班的『学习路线』 12-26 阅读数 13万+
说实话,对于学习路线这种文章我一般是不写的,大家看我的文章也知道,我是很少写建议别人怎么样怎么样的文章,更多的是,写自己的真实经历,然后供大家去参考,这样子,我内心也比较踏实,也不怕误导他人。但是,最... 博文 来自: 帅地
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截 11-03 阅读数 4万+
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。... 博文 来自: Evan 的博客
2019年还剩1天,我从外包公司离职了 12-30 阅读数 4万+
这日子过的可真快啊,2019年还剩1天,外包公司干了不到3个月,我离职了 博文 来自: dotNet全栈开发
Guava简介 07-27 阅读数 1万+
Guava是什么?Guava是一种基于开源的Java库,GoogleGuava源于2007年的"GoogleCollectionsLibrary"。这个库是为了方便编码,并减少编码... 博文 来自: sunayn的博客
Python3.7黑帽编程——病毒篇(基础篇) 01-24 阅读数 6万+
引子Hacker(黑客),往往被人们理解为只会用非法手段来破坏网络安全的计算机高手。但是,黑客其实不是这样的,真正的“网络破坏者”是和黑客名称和读音相似的骇客。骇客,是用黑客手段进行非法操作并为己取得... 博文 来自: tiantian520ttjs——Python程序猿~
130 个相见恨晚的超实用网站,一次性分享出来 03-09 阅读数 44万+
相见恨晚的超实用网站持续更新中。。。 博文 来自: 爪白白的个人博客
2020年秋招后端面经 10-24 阅读数 1万+
主要包含华为,网易互娱,广联达,科大讯飞,浦发,中兴,上海农商行这些已经拿offer的,还有京东(不小心把二面时间换了一下,等通知等三个月了),虾皮(一面挂),顺丰(sp专场一面之后没消息,秋招第一个... 博文 来自: xianlvfan2224的博客
中国麻将:世界上最早的区块链项目 10-29 阅读数 11万+
中国麻将:世界上最早的区块链项目最近区块链这个玩意又被市场搞的很是火热,相信大部分人都不太清楚这玩意到底是怎么样的一个概念,它来了,它来了,它到底是啥~ 国家都开始发文支持了,下面是一个通俗易懂的例子... 博文 来自: gao_chun
Guava工具类学习 12-20 阅读数 7648
Guava工具类学习一、概述 Guava是对Java API的补充,对Java开发中常用功能进行更优雅的实现,使得编码更加轻松,代码容易理解。Guava使用了很多种设计模式,同时经过了很多测试,... 博文 来自: ac_dao_di的专栏
Google团队开发的Guava工具包的代码示例 07-09 阅读数 47
上一篇 java代码如何连接Linux虚拟机,还有文件上传下载,等基础命令一、项目源地址 Github 链 接二、String 操作2.1 Join示例代码@Test // 这个包引的是 or... 博文 来自: 诗和远方,任重道远
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇 02-12 阅读数 1万+
今天介绍的项目是使用 Itchat 发送统计报告项目功能设计:定时爬取疫情数据存入Mysql进行数据分析制作疫情报告使用itchat给亲人朋友发送分析报告基于Django做数据屏幕使用Tableau做... 博文 来自: Fantasy!
【JSON解析】浅谈JSONObject的使用 03-25 阅读数 1663
简介在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理... 博文 来自: 一枕江风
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具! 12-29 阅读数 10万+
作者 | Rocky0429来源 | Python空间大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻…网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网... 博文 来自: Rocky0429
我一个37岁的程序员朋友 12-30 阅读数 1万+
周末了,人一旦没有点事情干,心里就瞎想,而且跟几个老男人坐在一起,更容易瞎想,我自己现在也是 30 岁了,也是无时无刻在担心自己的职业生涯,担心丢掉工作没有收入,担心身体机能下降,担心突...... 博文 来自: 嵌入式Linux
python json java mysql pycharm android linux json格式
没有更多推荐了,返回首页
©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客
小旋锋
博客专家 已认证的专家 TA的个人主页 >
勋章:
专栏达人
授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
持之以恒
授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
1024勋章
#1024程序员节#活动勋章,当日发布原创博客即可获得
关注
私信
个人主页:http://laijianfeng.org
github:https://github.com/whirlys
Java后端、大数据技术分享
展开
展开
手机看
×
扫一扫,手机浏览