2019独角兽企业重金招聘Python工程师标准>>>

package org.loda.guava;import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.google.common.base.CharMatcher;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;/***
* @ClassName: Basic
* @Description: guava之基础部分
* @author minjun
* @date 2015年6月14日 下午7:06:31
**/
public class Basic {private static final Logger logger = LoggerFactory.getLogger(Basic.class);/*** * @Title: testJoiner* @Description: 利用某个分隔符将一组字符串分隔开来* *               输出结果为: *               传统方法:loda,vigoss,merlini*               采用joiner:loda,vigoss,merlini* * @param 设定文件* @return void 返回类型* @throws*/@Testpublic void testJoiner() {List<String> list = Lists.newArrayList("loda", "vigoss", null,"merlini");String delimiter = ",";// 传统方法,采用stringbuilderlogger.info("传统方法:{}", joinWithStringBuilder(list, delimiter));// 采用guava提供的Joiner类logger.info("采用joiner:{}", joinWithGuava(list, delimiter));}private String joinWithGuava(List<String> list, String delimiter) {return Joiner.on(delimiter)// 创建一个Joiner对象,将分隔符delimiter设为全局变量.skipNulls()// 创建一个新的Joiner对象,复写其appendTo方法,用来过滤list中的空值// .useForNull("nullText")// 使用nullText替换空字符串.join(list);// 将list中的内容一个个的与delimiter分隔符连接起来}private String joinWithStringBuilder(List<String> list, String delimiter) {StringBuilder sb = new StringBuilder();for (String s : list) {if (s != null) {sb.append(s).append(delimiter);}}// 将最后的delimiter去掉sb.setLength(sb.length() - delimiter.length());return sb.toString();}/*** * @Title: testMapJoiner* @Description: 将一个map型数据组合成一个由指定分隔符分开的key-value样式* *               输出结果为:* *               贝克汉姆:中场;罗纳尔多:前锋;布冯:门将;齐达内:中场* * @param 设定文件* @return void 返回类型* @throws*/@Testpublic void testMapJoiner() {Map<String, String> map = Maps.newLinkedHashMap();String delimiter = ";";map.put("贝克汉姆", "中场");map.put("罗纳尔多", "前锋");map.put("布冯", "门将");map.put("齐达内", "中场");String returnString = Joiner.on(delimiter)// 创建了一个以delimiter作为分隔符的Joiner.withKeyValueSeparator(":")// 创建了一个以:作为键值间隔符的MapJoiner.join(map);// 将这个指定了MapJoiner样式的map连接成一个字符串logger.info(returnString);}/*** * @Title: testSplitter* @Description: 将含有指定分隔符的字符串分开* @param 设定文件* @return void 返回类型* @throws*/@Testpublic void testSplitter() {String text = "英文|中文||韩文|法文|  xx   |";logger.info(Arrays.toString(text.split("\\|")));logger.info(Splitter.on("|")// 创建一个以"|"作为切分的Splitter.trimResults()// 对切分所有结果,去掉两边空格.split(text)// 将字符串text按照"|"切分开来.toString());}/*** * @Title: testMapSplitter* @Description:使用MapSplitter可以将按照键值对规则组合起来的字符串,拆分成一个一个map中的键值对* *  输出结果为:*              key为贝克汉姆,value为中场*      key为罗纳尔多,value为前锋*      key为布冯,value为门将*        key为齐达内,value为中场* @param 设定文件* @return void 返回类型* @throws*/@Testpublic void testMapSplitter() {String text = "贝克汉姆:中场;罗纳尔多:前锋;布冯:门将;齐达内:中场";String delimiter = ";";Map<String, String> map = Splitter.on(delimiter).withKeyValueSeparator(":").split(text);for (Entry<String, String> e : map.entrySet()) {logger.info("key为{},value为{}", e.getKey(), e.getValue());}}/*** * @Title: testCharsets* @Description: 字符集处理* @param 设定文件* @return void 返回类型* @throws*/@SuppressWarnings("unused")@Testpublic void testCharsets() {String text = "编码问题";// 获取该字符串指定编码字符集的时候,如果传递参数为string类型,则需要强行捕捉异常,因为这个spring类型可能填写错误try {byte[] b = text.getBytes("utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}// 但是使用Charset类型作为参数却没有问题,所以guava帮我们封装了几种常用的编码,并以Charset类型返回,让我们直接当做参数传递进去// 这里无需捕捉任何异常情况,因为使用了guava封装的字符集,根本不可能报错byte[] bt = text.getBytes(Charsets.UTF_8);}/*** * @Title: testStrings* @Description: 给指定的字符串后添加字符* @param 设定文件* @return void 返回类型* @throws*/@Testpublic void testStrings() {StringBuilder text = new StringBuilder("helloworld");char c = 'x';for (int i = 0; i < 3; i++) {text.append(c);}Assert.assertEquals(text.toString(), "helloworldxxx");// 给字符串helloworld后面不断添加'x'字符,直到整个字符串长度达到了13。如果该长度没有helloworld长度大,则直接返回helloworldString result = Strings.padEnd("helloworld", 13, c);Assert.assertEquals(result, "helloworldxxx");// 如果是null,则转成""空字符串;否则返回原始字符串。这是一个推荐使用的函数Assert.assertEquals(Strings.nullToEmpty(null), "");// 如果字符串是""空字符串,则直接返回nullAssert.assertNull(Strings.emptyToNull(""));// 如果字符串是""空串,或者是null,则返回trueAssert.assertTrue(Strings.isNullOrEmpty("")&& Strings.isNullOrEmpty(null));}@Testpublic void testCharMatcher() {String text = "My name is    loda,  I'm a IT guy!";// 将多个空格合并为一个空格String after = CharMatcher.WHITESPACE.collapseFrom(text, ' ');Assert.assertEquals(after, "My name is loda, I'm a IT guy!");String charWithNumber = "12xabd34";Assert.assertEquals(CharMatcher.JAVA_DIGIT.retainFrom(charWithNumber),"1234");}@Testpublic void testPreconditions() {int a = 10;Preconditions.checkArgument(a > 10, "参数必须大于10");Preconditions.checkNotNull(null, "不能为空");}@Testpublic void testMoreObjects() {Student s = new Student(1, null, "male", 13);// 利用guava的toString格式化对象Assert.assertEquals(s.toString(), "Student{id=1, sex=male, age=13}");// 查找第一个不为空的元素,如果都是null,则抛出空指针异常Assert.assertEquals(MoreObjects.firstNonNull(null, "jack"), "jack");Student s1 = new Student(1, "jack", "female", 13);Student s2 = new Student(1, "jack", "male", 14);Assert.assertTrue("检查s1是否小于s2", s1.compareTo(s2) < 0);}private class Student implements Comparable<Student> {public Student(int id, String name, String sex, int age) {super();this.id = id;this.name = name;this.sex = sex;this.age = age;}private int id;private String name;private String sex;private int age;@Overridepublic String toString() {return MoreObjects.toStringHelper(this)// 创建ToStringHelper对象.omitNullValues()// 忽略空值.add("id", id)// 将id添加入内.add("name", name)// 将name添加入内.add("sex", sex)// 将sex添加入内.add("age", age)// 将age添加入内----guava采用链表连接所有属性.toString();// 将ToStringHelper格式化为字符串内容}@Overridepublic int compareTo(Student s) {// 如果需要对多个值进行进行比较,以完成排序过程,典型写法为:// return typicalCompare(s);// 使用了guava,你就可以这样写了return ComparisonChain.start().compare(this.id, s.id)// 将id加入比较器.compare(this.name, s.name)// 将name加入比较器.compare(this.sex, s.sex)// 将sex加入比较器.compare(this.age, s.age)// 将age加入比较器.result();// 得出比较结果}@SuppressWarnings("unused")public int typicalCompare(Student s) {int result = this.id - s.id;// 优先级从高到低,如果某个属性比较结果相等,则继续将后面的元素进行比较if (result != 0)return result;result = this.name.compareTo(s.name);if (result != 0)return result;result = this.sex.compareTo(s.sex);if (result != 0)return result;return this.age - s.age;}}}

转载于:https://my.oschina.net/u/1378920/blog/466598

google guava的基础部分Demo实例(注释详尽)相关推荐

  1. Java核心技术卷一基础知识第10版demo实例

    Java核心技术卷一基础知识第10版demo实例 第三章 JAVA的基本程序设计结构 3.7输入与输出 3.7.1读取输入 3.8控制流程 3.8.3循环 3.10数组 3.10.6多维数组 第四章 ...

  2. google guava 入门教程

    Guava(瓜娃)学习笔记 (代码下载地址) Guava工程包含了若干被google的java项目广泛依赖的核心库,例如:集合 [collections] .缓存 [caching] .原生类型支持 ...

  3. [Google Guava] 9-I/O

    原文链接 译文链接 译者:沈义扬 字节流和字符流 Guava使用术语"流" 来表示可关闭的,并且在底层资源中有位置状态的I/O数据流.术语"字节流"指的是Inp ...

  4. Spring Caching抽象和Google Guava Cache

    Spring为缓存昂贵的方法调用提供了强大的开箱即用支持. 这里详细介绍了缓存抽象. 我的目的是要介绍Spring现在为框架的4.0+版本提供的较新的缓存实现之一-使用Google Guava Cac ...

  5. Google Guava EventBus用于事件编程

    在任何软件应用程序中都是如此,有些对象需要共享信息才能完成工作. 在Java应用程序中,实现信息共享的一种方法是拥有事件侦听器,其唯一目的是在发生所需事件时采取某些措施. 在大多数情况下,此过程有效, ...

  6. Google Guava v07范例

    我们在TouK举办了一个名为"每周技术研讨会"的活动,即每个星期五的16:00,每个愿意参加的人都有一个演讲. 我们展示了我们在家学习和学习的东西,但是我们也设有一个公告板,上面有 ...

  7. Android 系统(207)---Android各种Drawable讲解和demo实例

    Android各种Drawable讲解和demo实例 转载自  : https://blog.csdn.net/linghu_java/article/details/42119969 PS:文字内容 ...

  8. 借Google Guava学习发现和开发通用功能模块

    如何发现通用的功能模块? 很多人觉得做业务开发没有挑战,实际上,做业务开发也会涉及很多非业务功能的开发,比如我们前面讲到的 ID 生成器.性能计数器.EventBus.DI 容器,以及后面会讲到的限流 ...

  9. Guava中基础工具类Joiner的使用字符串拼接方法 joiner.on

    Guava 中有一些基础的工具类,如下所列: 1,Joiner 类:根据给定的分隔符把字符串连接到一起.MapJoiner 执行相同的操作,但是针对 Map 的 key 和 value. 2,Spli ...

最新文章

  1. SIFT特征提取算法总结
  2. 在Silverlight+WCF中应用以角色为基础的安全模式(一)基础篇之角色为基础的安全模式简介...
  3. 关于Session的使用和优化
  4. jpi多表联查_数据库两表联查、多表联查,多重联查
  5. c51编程语言基础习题,《单片机基础》练习题及答案
  6. Leetcode算法题(C语言)13--反转字符串
  7. 树莓派Raspberry Pi OS开机自启动脚本
  8. 网络协议从入门到底层原理(2)路由、网络常见概念(因特网, ISP, 接口, 上网方式)、公网私网、NAT
  9. 服务器导流板的作用,前保险杠下导流板的作用是什么?
  10. 嵌入式开发与C++开发的区别是什么?
  11. 【C++】判断指定元素是否在vector中的若干种方法小结
  12. 产品经理面试题汇总(1)
  13. html在手机显示时间,手机北京时间校准
  14. 拟物化设计与扁平化设计
  15. Visual Studio 报错:未能加载工具箱项,将从项目中移除
  16. openGL中的抗锯齿实现
  17. Unittest-单元测试
  18. Linux中的ps指令详解
  19. java telephony jar_编译错误解决方法
  20. 频谱仪原理与重要指标的作用

热门文章

  1. golang开发GUI桌面应用fyne(三)
  2. macOS Big Sur 11.0.1(20B5012d)原版镜像下载
  3. slashdot网站架构:硬件和软件 zz
  4. 网络基础--路由器的基本配置
  5. Charls免费注册
  6. adb命令打开手机设置页面
  7. 微软的东西,没一个让你省心
  8. 解决for循环将字典添加到列表中出现覆盖前面数据的问题
  9. 使用tinyMediaManager整理电影和电视文件
  10. 省市区三级联动html