【面试官:“熟悉哪种语言”。
应聘者:“JAVA”。
面试官:“知道什么叫类么”。
应聘者:“我这人实在,工作努力,不知道什么叫累”。
面试官:“知道什么是包?”。
应聘者:“我这人实在 平常不带包 也不用公司准备了”。
面试官:“知道什么是接口吗?”。
应聘者:“我这个人工作认真。从来不找借口偷懒”。
面试官:“知道什么是继承么”。
应聘者:“我是 孤儿没什么可以继承的”。
面试官:“知道什么叫对象么?”。
应聘者:“知道,不过我工作努力,上进心强,暂时还没有打算找对象。”。
面试官:“知道多态么?”。
应聘者:“知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系?”】
大家好,我录制的视频《Java之优雅编程之道》已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的。谢谢大家的支持……
视频地址:http://edu.csdn.net/lecturer/994
Guava扩展包对项目比较有用的知识有哪些???
Guava,中文是石榴的意思 ,一个基于JDK1.6类库集合的扩展项目
源码包的简单说明:
com.google.common.annotations:普通注解类型。
com.google.common.base:基本工具类库和接口。
com.google.common.cache:缓存工具包,非常简单易用且功能强大的JVM内缓存。
com.google.common.collect:带泛型的集合接口扩展和实现,以及工具类,这里你会发现很多好玩的集合。
com.google.common.eventbus:发布订阅风格的事件总线。
com.google.common.hash: 哈希工具包。
com.google.common.io:I/O工具包。
com.google.common.math:原始算术类型和超大数的运算工具包。
com.google.common.net:网络工具包。
com.google.common.primitives:八种原始类型和无符号类型的静态工具包。
com.google.common.reflect:反射工具包。
com.google.common.util.concurrent:多线程工具包。
更多的内容,可以阅读下面参考的文章。
我比较关心的是如何使用该工具类,使JAVa代码更加优雅,更加简洁,然后愉快的玩耍。
实例一:
package com.evada.de;
import com.google.common.base.Strings;
import org.junit.Test;
/**
* @Author 阿毅
* Created by Ay on 2016/01/21.
*/
public class Ay{
@Test
public void test(){
System.out.println(Strings.isNullOrEmpty(""));//true
System.out.println(Strings.nullToEmpty(null));//""
System.out.println(Strings.nullToEmpty("ay"));//"ay"
System.out.println(Strings.emptyToNull(""));//null
System.out.println(Strings.emptyToNull("ay"));//"ay"
System.out.println(Strings.commonPrefix("aaay", "aal"));//"aa"否则返回""
System.out.println(Strings.commonSuffix("aaay", "aal"));//"aac"否则返回""
String str1 = "ay.";
//在str1后补'a'补够15个长度
String strr1 = Strings.padEnd(str1, 15,'l');
System.out.println(strr1);//ay.llllllllllll
//在str2前补'a'补够10个长度
String str2 = "welcome";
String strr2 = Strings.padStart(str2, 10, 'm');
System.out.println(strr2);
}
}
实例二:
package com.evada.de;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @Author 阿毅
* Created by Ay on 2016/01/21.
*/
public class Ay{
@Test
public void test(){
Joiner joiner = Joiner.on("; ").skipNulls();
System.out.println(joiner.join("ay", null, "al", "love"));//ay; al; love
List joinListStr = new ArrayList<>();
joinListStr.add("ay");
joinListStr.add(null);
joinListStr.add("al");
joinListStr.add("love");
Joiner joiner2 = Joiner.on("; ").skipNulls();
System.out.println(joiner2.join(joinListStr));//ay; al; love
//trimResults 和 omitEmptyStrings可以去空,去空白
Iterable splitterArray = Splitter.on(',').trimResults().omitEmptyStrings().split("ay,al,, love");
System.out.println(splitterArray.toString());//[ay, al, love]
//传统的字符串分割
String[] originArray = "ay,al,, love".split(",");
System.out.println(Arrays.toString(originArray));//[ay, al, , love]
System.out.println(originArray.length);// 4(长度为)
for(int i=0;i
连接器[Joiner] 和 拆分器[Splitter] 拆分器修饰符
方法 描述
omitEmptyStrings() 从结果中自动忽略空字符串
trimResults() 移除结果字符串的前导空白和尾部空白
trimResults(CharMatcher) 给定匹配器,移除结果字符串的前导匹配字符和尾部匹配字符
limit(int) 限制拆分出的字符串数量
如果想要拆分器返回List,只要使用Lists.newArrayList(splitter.split(string))或类似方法。
splitter实例总是不可变的。用来定义splitter目标语义的配置方法总会返回一个新的splitter实例。这使得splitter实例都是线程安全的,你可以将其定义为static final常量。
我们看看源码就清楚了:
public static Splitter on(final CharMatcher separatorMatcher) {
Preconditions.checkNotNull(separatorMatcher);
//新的splitter实例
return new Splitter(new Splitter.Strategy() {
public Splitter.SplittingIterator iterator(final Splitter splitter, final CharSequence toSplit) {
return new Splitter.SplittingIterator(splitter, toSplit) {
int separatorStart(int start) {
return separatorMatcher.indexIn(this.toSplit, start);
}
int separatorEnd(int separatorPosition) {
return separatorPosition + 1;
}
};
}
});
}
3.1集合实例化
package com.evada.de;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.junit.Test;
import java.util.*;
/**
* @Author 阿毅
* Created by Ay on 2016/01/21.
*/
public class Ay{
@Test
public void test(){
//传统的
List list = new ArrayList();
//Gvava瓜娃写法
List list2 = Lists.newArrayList();
Map map = Maps.newLinkedHashMap();
//这个构造方法非常实用
List list3 = Lists.newArrayList("ay", "and", "al");
//指定容器的大小
List exactly100 = Lists.newArrayListWithCapacity(100);
List approx100 = Lists.newArrayListWithExpectedSize(100);
Set approx100Set = Sets.newHashSetWithExpectedSize(100);
}
}
更多的内容可以参考官方API
3.2 Iterables
package com.evada.de;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.junit.Test;
import java.util.*;
/**
* @Author 阿毅
* Created by Ay on 2016/01/21.
*/
public class Ay{
@Test
public void test(){
List list3 = Lists.newArrayList("ay", "and", "al");
//好用
Iterable concatenated = Iterables.concat(list3);
String lastAdded = Iterables.getLast(concatenated);
System.out.println(lastAdded);//al
}
}
Guava还提供了很多其他集合的好用方法,这里只是简单的罗列出比较有用的,更多内容可以百度上搜索。
3.3不可变集合与使用不可变集合
不可变集合优点:
不可变集合可以用如下多种方式创建:
Builder工具,如
public static final ImmutableSet GOOGLE_COLORS =
ImmutableSet.builder()
.addAll(WEBSAFE_COLORS)
.add(new Color(0, 191, 255))
.build();
此外,对有序不可变集合来说,排序是在构造集合的时候完成的,如:
ImmutableSortedSet.of("a", "b", "c", "a", "d", "b");
会在构造时就把元素排序为a, b, c, d。
Objects.equal("a", "a"); // returns true
Objects.equal(null, "a"); // returns false
Objects.equal("a", null); // returns false
Objects.equal(null, null); // returns true
在前面的文章《Java之项目用到类Objects,TreeMap排序简单分享》,有提到,可以去阅读
上面的内容可以自学,网上资料还是很多的。
来自键人(林育圣)《负负得正的人生奥义书》
【加拿大有一个印第安人的部落,冬天过后,他们点起篝火,将所有过冬的帐篷,用具付之一炬,重修开始四处渔猎的生活。启发:学会忘掉过去,推翻过去自己,重新开始】
【1】Guava学习笔记:Google Guava 类库简介
【2】Java代码优雅之道-Guava
【3】强大的GUAVA之Strings
【4】[Guava学习笔记]Strings: 字符串处理
【5】[Google Guava] 6-字符串处理:分割,连接,填充
【6】[Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具
【7】[Google Guava] 2.1-不可变集合
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!