基本Guava工具
public String buildString(List<String> stringList, String delimiter){
StringBuilder builder = new StringBuilder();
for (String s : stringList) {
if(s !=null){
builder.append(s).append(delimiter);
}
}
builder.setLength(builder.length() – delimiter.length());
return builder.toString();
}
public String buildString(List<String> stringList, String delimiter){
return Joiner.on(delimiter).skipNulls().join(stringList);
}
Joiner.on("|").useForNull("no value").join(stringList);
Joiner stringJoiner = Joiner.on("|").skipNulls();
//使用useForNull方法将会返回一个新的Joiner实例
stringJoiner.useForNull("missing");
stringJoiner.join("foo","bar",null);
StringBuilder stringBuilder = new StringBuilder();
Joiner joiner = Joiner.on("|").skipNulls();
//返回的StringBuilder实例当中包含连接完成的字符串
joiner.appendTo(stringBuilder,"foo","bar","baz");
FileWriter fileWriter = new FileWriter(new File("path")):
List<Date> dateList = getDates();
Joiner joiner = Joiner.on("#").useForNulls(" ");
// 返回由字符串拼接后的FileWriter实例
joiner.appendTo(fileWriter,dateList);
MapJoiner mapJoiner = Joiner.on("#").withKeyValueSeparator("=");
- Joiner.on("#")方法会创建一个Joiner的实例。
- 使用返回的Joiner实例调用withKeyValueSeparator方法将会返回MapJoiner对象。
@Test
public void testMapJoiner() {
String expectedString = "Washington D.C=Redskins#New York City=Giants#Philadelphia=Eagles#Dallas=Cowboys";
Map<String,String> testMap = Maps.newLinkedHashMap();
testMap.put("Washington D.C","Redskins");
testMap.put("New York City","Giants");
testMap.put("Philadelphia","Eagles");
testMap.put("Dallas","Cowboys");
String returnedString = Joiner.on("#"). withKeyValueSeparator("=").join(testMap);
assertThat(returnedString,is(expectedString));
}
String testString = "Monday,Tuesday,,Thursday,Friday,,";
//parts is [Monday, Tuesday, , Thursday,Friday]
String[] parts = testString.split(",");
Splitter.on('|').split("foo|bar|baz");
Splitter splitter = Splitter.on("\\d+");
//Splits on '|' and removes any leading or trailing whitespace
Splitter splitter = Splitter.on('|').trimResults();
Splitter splitter = Splitter.on('|');
//Next call returns a new instance, does not
modify the original!
splitter.trimResults();
//Result would still contain empty elements
Iterable<String> parts = splitter.split("1|2|3|||");
//MapSplitter is defined as an inner class of Splitter
Splitter.MapSplitter mapSplitter = Splitter.on("#"). withKeyValueSeparator("=");
@Test
public void testSplitter() {
String startString = "Washington D.C=Redskins#New York City=Giants#Philadelphia=Eagles#Dallas=Cowboys";
Map<String,String> testMap = Maps.newLinkedHashMap();
testMap.put("Washington D.C","Redskins");
testMap.put("New York City","Giants");
testMap.put("Philadelphia","Eagles");
testMap.put("Dallas","Cowboys");
Splitter.MapSplitter mapSplitter = Splitter.on("#").withKeyValueSeparator("=");
Map<String,String> splitMap = mapSplitter.split(startSring);
assertThat(testMap,is(splitMap));
}
- CharMatcher
- Charsets
- Strings
byte[] bytes = someString.getBytes();
try{
bytes = "foobarbaz".getBytes("UTF-8");
}catch (UnsupportedEncodingException e){
//This really can't happen UTF-8 must be supported
}
- UTF-8在java平台 一定会被支持,所以UnsupportedEncodingException一定不会被抛出
- 一旦我们使用字符串指定字符集的定义,我们可以产生拼写错误然后导致异常抛出。
byte[] bytes2 = "foobarbaz".getBytes(Charsets.UTF_8);
StringBuilder builder = new StringBuilder("foo");
char c = 'x';
for(int i=0; i<3; i++){
builder.append(c);
}
return builder.toString();
Strings.padEnd("foo",6,'x');
- nullToEmpty:这个方法接受一个字符串参数,如果传入的参数不是null值或者长度大于0则原样返回,否则返回空串("");
- emptyToNull:这个方法类似于nullToEmpty,它将返回null值如果传入的参数是空串或者null。
- isNullOrEmpty:这个方法会检查传入参数是否为null和长度,如果是null和长度为0就返回true。
CharMatcher.BREAKING_WHITESPACE.replaceFrom(stringWithLinebreaks,' ');
@Test
public void testRemoveWhiteSpace(){
String tabsAndSpaces = "String with spaces and tabs";
String expected = "String with spaces and tabs";
String scrubbed = CharMatcher.WHITESPACE.collapseFrom(tabsAndSpaces,' ');
assertThat(scrubbed,is(expected));
}
@Test
public void testTrimRemoveWhiteSpace(){
String tabsAndSpaces = " String with spaces and tabs";
String expected = "String with spaces and tabs";
String scrubbed = CharMatcher.WHITESPACE. trimAndCollapseFrom(tabsAndSpaces,' ');
assertThat(scrubbed,is(expected));
}
@Test
public void retainFromTest()
{
String lettersAndNumbers = "foo989yxbar234";
String expected = "989234";
String actual = CharMatcher.JAVA_DIGIT.retainFrom(lettersAndNumbers);
assertEquals(expected, actual);
}
CharMatcher cm = CharMatcher.JAVA_DIGIT.or(CharMatcher.WHITESPACE);
if(someObj == null){
throw new IllegalArgumentException(" someObj must not be null");
}
checkNotNull(someObj,"someObj must not be null");
public class PreconditionExample {
private String label;
private int[] values = new int[5];
private int currentIndex;
public PreconditionExample(String label) {
//返回label如果不为空
this.label = checkNotNull(label,"Label can''t be null");
}
public void updateCurrentIndexValue(int index, int valueToSet) {
//检查索引是否有效
this.currentIndex = checkElementIndex(index, values.length, "Index out of bounds for values");
//检查参数值
checkArgument(valueToSet <= 100,"Value can't be more than 100");
values[this.currentIndex] = valueToSet;
}
public void doOperation(){
checkState(validateObjectState(),"Can't perform operation");
}
private boolean validateObjectState(){
return this.label.equalsIgnoreCase("open") && values[this.
currentIndex]==10;
}
}
- checkNotNull(T object, Object message):这个方法如果object不为null直接返回,如果为null会抛出空指针异常。
- checkElementIndex (int index, int size, Object message):在这方法当中,index是你将要访问的元素下标,size是这个要访问的array,list或者字符串的长度。然后校验是否有效,如果无效抛出IndexOutOfBoundsException。
- checkArgument (Boolean expression, Object message):这方法传入布尔表达式。 这个布尔表达式如果为true则继续执行,否则抛出IllegalArgumentException。
- checkState (Boolean expression, Object message):这方法传入 一个布尔表达式涉及对象的状态,而不是参数。 这个布尔表达式如果为true则继续执行,否则抛出IllegalArgumentException。
public class Book implements Comparable<Book> {
private Person author;
private String title;
private String publisher;
private String isbn;
private double price;
public String toString() {
return Objects.toStringHelper(this).omitNullValues().add("title", title).add("author", author).add("publisher", publisher)
.add("price",price).add("isbn", isbn).toString();
}
}
- 首先我们传入一个Book对象来创建一个Objects.ToStringHelper实例。
- 第二步,我们调用omitNullValues来排除任何null值的属性。
- 调用add方法来添加每一个属性的标签和属性。
String value = Objects.firstNonNull(someString, "default value");
public int hashCode() {
return Objects.hashCode(title, author, publisher, isbn);
}
public int compareTo(Book o) {
int result = this.title.compareTo(o.getTitle());
if (result != 0) {
return result;
}
result = this.author.compareTo(o.getAuthor());
if (result != 0) {
return result;
}
result = this.publisher.compareTo(o.getPublisher());
if(result !=0 ) {
return result;
}
return this.isbn.compareTo(o.getIsbn());
}
public int compareTo(Book o) {
return ComparisonChain.start() .compare(this.title, o.getTitle()) .compare(this.author, o.getAuthor())
.compare(this.publisher, o.getPublisher()) .compare(this.isbn, o.getIsbn()) .compare(this.price, o.getPrice()) .result();
}
基本Guava工具的更多相关文章
- 强大的 Guava 工具类
Java 开发的同学应该都使用或者听说过 Google 提供的 Guava 工具包.日常使用最多的肯定是集合相关的工具类,还有 Guava cache,除了这些之外 Guava 还提供了很多有用的功能 ...
- 工具篇:介绍几个好用的guava工具类
前言 平时我们都会封装一些处理缓存或其他的小工具.但每个人都封装一次,重复造轮子,有点费时间.有没有一些好的工具库推荐-guava.guava是谷歌基于java封装好的开源库,它的性能.实用性,比我们 ...
- Google的Guava工具类splitter和apache stringutil对比 编辑
一直用的是apache的stringutil工具类,其实google的工具类项目 guava中居然也有字符串的分隔类splitter的,在 http://code.google.com/p/guava ...
- [转]基本Guava工具
转自:http://www.cnblogs.com/renchunxiao/p/3661918.html?utm_source=tuicool 使用Joiner类 将任意字符串通过分隔符进行连接到一起 ...
- Guava工具类
原文链接:http://blog.csdn.net/mnmlist/article/details/53425865 Objects类 Objects类有几个比较不错的方法,toString.hash ...
- Google guava工具类的介绍和使用
概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率.谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来.所以就诞生了guava.. 高效设计良好的API ...
- Guava工具类学习
目录 一.介绍 二.Optional类 1.定义 2.java8自带Optional 3.使用 三.Preconditions类 1.定义 2.使用 四.Ordering类 1.定义 2.使用 五.R ...
- Guava 工具类之Cache的使用
一.guava cache 介绍 1.介绍 guava cache是Google guava中提供的一款轻量级的本地缓存组件,其特点是简单.轻便.完善.扩展性强,内存管理机制也相对完善. 2.使用缓存 ...
- Guava 工具类之 Splitter的使用
Splitter可以对字符串进行分割,在分割时的方式有2种, 1.按字符/字符串分割 2.按正则进行分割 Splitter在分割完成时可以转换成list和map 一.按字符进行分割 //1.用指定字符 ...
随机推荐
- UML之轻松入门(2)-掌握Junit,让我们的开发更高效
使用UML不仅能够形象化的表达我们的程序思想,并且能够帮助我们提高程序的质量.一个杂乱无章的程序让维护者望而生畏,其成本也可想而知.在面向程序设计(OOD)中有5条原则是帮助我们设计一个高效 ...
- 【百度地图API】小学生找哥哥——小学生没钱打车,所以此为公交查询功能
原文:[百度地图API]小学生找哥哥--小学生没钱打车,所以此为公交查询功能 任务描述: 有位在魏公村附近上小学的小朋友,要去北京邮电大学找哥哥.他身上钱很少,只够坐公交的.所以,百度地图API快帮帮 ...
- STL 源代码分析 算法 stl_algo.h -- binary_search
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie binary_search -------------------------------- ...
- Java设计模式(八)观察者模式 迭代器模式
(十五)观察者模式 观察者模式,定义对象间一对多关系,一个对象状态发生改变,全部依赖于它的对象都收到通知而且自己主动更新,观察者与被观察者分开.比如邮件订阅.RSS订阅,假设有更新就会邮件通知你. i ...
- c语言中实现从0-1的随机数输出
原文:c语言中实现从0-1的随机数输出 今天晚上同学问了一个巨简单的问题,问我怎么用c语言输出0-1的随机数,可别说,一时之间还想不出来.在写的过程中发现,直接调用random函数还不能实现,用以下方 ...
- Windows下一个ROracle安装与使用
ROracle一个简短的引论: ROracle这是R连接到接入Oracle数据库DBI(Oracledatabase interface)介面.这是基于OCI一个DBI兼容Oracle司机. 具体见说 ...
- ASP.Net MVC请求处理流程
ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...
- js页码生成库,一个适合前后端分离的页码生成器
原文:js页码生成库,一个适合前后端分离的页码生成器 前言 上星期写的任务里面有需要进行分页的处理,git搜索了一番,没有觉得合适的,于是自己临时写了个分页的算法. 然后等闲下来的时候,决定把分页进行 ...
- Angular指令(一)
Angular开发者手册重点翻译之指令(一) 创建自定义的指令 这个文章将解释什么需要在自己的angularjs应用中创建自己的指令,以及如何实现它. 什么是指令 在高的层面上讲,指令是DOM元素中的 ...
- Tomcat集群+Nginx+Redis服务搭建
由于公司新业务突然上来了,单个Tomcat实例已经不能满足业务发展的需要了,只能通过搭建集群来解决问题了.所以就出现了下面的内容: 1.Redis保存Session信息 为了保存Session信息在集 ...