import
com.google.common.base.CharMatcher;
import
com.google.common.base.Charsets;
import
com.google.common.base.Function;
import
com.google.common.base.Joiner;
import
com.google.common.base.Preconditions;
import
com.google.common.base.Splitter;
import
com.google.common.collect.ArrayListMultimap;
import
com.google.common.collect.ImmutableList;
import
com.google.common.collect.ImmutableMap;
import
com.google.common.collect.ImmutableSet;
import
com.google.common.collect.Lists;
import
com.google.common.collect.MapDifference;
import
com.google.common.collect.Maps;
import
com.google.common.collect.Multimap;
import
com.google.common.collect.Multimaps;
import
com.google.common.collect.Ordering;
import
com.google.common.collect.Sets;
import
com.google.common.collect.Sets.SetView;
import
com.google.common.io.Files;
import
com.google.common.primitives.Doubles;
import
com.google.common.primitives.Ints;
import
static
com.google.common.base.Predicates.*
;
import
static
com.google.common.collect.Iterables.*
;
public
class
Test {
private
String title;
private
Date date;
private
String author;
public
static
void
main(String[] args) {
//
普通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"
);
//
文件读取演示
File file =
new
File("/home/alexis/tests/text1"
);
List
<String> content =
null
;
try
{
content
=
Files.readLines(file, Charsets.UTF_8);
}
catch
(IOException ex) {
ex.printStackTrace();
for
(String line : content) {
System.out.println(line);
//
基本类型操作
int
[] arr = {1, 2, 3
};
int
[] arr2 = {1, 2, 3
};
int
intCmp = Ints.compare(1, 2
);
int
doubleCmp = Doubles.compare(1.1, 1.2
);
int
index = Ints.indexOf(arr, 1
);
boolean
contains = Ints.contains(arr, 1
);
int
max =
Ints.max(arr);
int
min =
Ints.min(arr);
int
[] arr3 =
Ints.concat(arr, arr2);
//
List转数组
List<Integer> intList = Lists.newArrayList(1, 2, 3
);
int
[] intArr =
Ints.toArray(intList);
//
便利字符匹配类 CharMatcher
//
判断匹配结果
boolean
result = CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z')).matches('K'
);
//
保留数字文本
String s1 = CharMatcher.DIGIT.retainFrom("abc 123 efg"
);
//
删除数字文本
String s2 = CharMatcher.DIGIT.removeFrom("abc 123 efg"
);
//
更多方法参见
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/CharMatcher.html
//
Joiner 与 Splitter
//
使用 "/" 串联字符串
String[] subdirs = { "usr", "local", "lib"
};
String path
= Joiner.on("/"
).join(subdirs);
System.out.println(path);
//
使用 "," 切分字符串并去除空串与空格
String s = "dog ,,, cat,fish,"
;
Iterable
<String> i = Splitter.on(','
).omitEmptyStrings().trimResults().split(s);
for
(String ss : i) {
System.out.println(ss);
//
集合过滤器
//
使用自定义回调方法对Map的每个Value进行操作
ImmutableMap<String, Double> m = ImmutableMap.of("a", 1.1, "b", 1.2
);
//
Function<F, T> F表示apply()方法input的类型,T表示apply()方法返回类型
Map<String, Double> m2 = Maps.transformValues(m,
new
Function<Double, Double>
() {
double
e = 1.2
;
@Override
public
Double apply(Double input) {
return
input *
e;
System.out.println(m2);
//
条件过滤集合
//
方法来自 com.google.common.collect.Iterables 以及 com.google.common.base.Predicates
ImmutableList<String> names = ImmutableList.of("Aleksander", "Jaran", "Integrasco", "Guava", "Java"
);
Iterable
<String> fitered = filter(names, or(equalTo("Aleksander"), equalTo("Jaran"
)));
System.out.println(fitered);
//
对计划排序,并生成排序后的集合拷贝视图
Man man1 =
new
Man("Alexis", "Drazen"
);
Man man2
=
new
Man("Bob", "Lee"
);
Man man3
=
new
Man("Vince", "Carter"
);
ImmutableList
<Man> men =
ImmutableList.of(man1, man2, man3);
Comparator
<Man> byLastName =
new
Comparator<Man>
() {
public
int
compare(
final
Man p1,
final
Man p2) {
return
p1.getLastName().compareTo(p2.getLastName());
Comparator
<Man> byFirstName =
new
Comparator<Man>
() {
public
int
compare(
final
Man p1,
final
Man p2) {
return
p1.getFirstName().compareTo(p2.getFirstName());
//
先按 lastName 再按 firstName 排序,最后倒序
List<Man> sortedCopy =
Ordering.from(byLastName).compound(byFirstName).reverse().sortedCopy(men);
System.out.println(sortedCopy);
//
集合的合集,交集,差集
HashSet<Integer> setA = Sets.newHashSet(1, 2, 3, 4, 5
);
HashSet
<Integer> setB = Sets.newHashSet(4, 5, 6, 7, 8
);
SetView
<Integer> union =
Sets.union(setA, setB);
System.out.println(
"union:"
);
for
(Integer integer : union)
System.out.println(integer);
SetView
<Integer> difference =
Sets.difference(setA, setB);
System.out.println(
"difference:"
);
for
(Integer integer : difference)
System.out.println(integer);
SetView
<Integer> intersection =
Sets.intersection(setA, setB);
System.out.println(
"intersection:"
);
for
(Integer integer : intersection)
System.out.println(integer);
//
Map 的更多操作
Map<String, String> mapA = ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3"
);
Map
<String, String> mapB = ImmutableMap.of("k2", "v2", "k3", "v3", "k4", "v4"
);
MapDifference
<String, String> differenceMap =
Maps.difference(mapA, mapB);
differenceMap.areEqual();
Map entriesDiffering
=
differenceMap.entriesDiffering();
Map entriesOnlyOnLeft
=
differenceMap.entriesOnlyOnLeft();
Map entriesOnlyOnRight
=
differenceMap.entriesOnlyOnRight();
Map entriesInCommon
=
differenceMap.entriesInCommon();
System.out.println(entriesDiffering);
System.out.println(entriesOnlyOnLeft);
System.out.println(entriesOnlyOnRight);
System.out.println(entriesInCommon);
//
使用Preconditions进行校验,校验不通过会抛出相应的异常
Test t =
new
Test("Tite",
new
Date(), "Author"
);
//
Multimap的使用,Multimap<T1, T2>,T1表示Map的键,T2表示Value集合的集合元素类型
Map<String, List<Man>> map =
new
HashMap<String, List<Man>>
();
public
void
addMan1(String author, Man Man) {
List
<Man> Mans =
map.get(author);
if
(Mans ==
null
) {
Mans
=
new
ArrayList<Man>
();
map.put(author, Mans);
Mans.add(Man);
//
使用Multimap替代以上代码
Multimap<String, Man> multimap =
ArrayListMultimap.create();
public
void
addMan2(String name, Man man) {
multimap.put(name, man);
//
Multimap的高级应用
//
listOfMaps代表一个List中包含多个这种 mapOf("type", "blog", "id", "292", "author", "john"); 类型的Map
//
现在需要根据type将这些map放在不同的list中
List listOfMaps =
null
;
//
这里省略 listOfMaps 的初始化
Multimap<String, Map<String, String>> partitionedMap =
Multimaps.index(
listOfMaps,
new
Function<Map<String, String>, String>
() {
public
String apply(
final
Map<String, String>
from) {
return
from.get("type"
);
//
使用Preconditions进行校验
public
Test(String title, Date date, String author) {
this
.title =
Preconditions.checkNotNull(title);
this
.date =
Preconditions.checkNotNull(date);
this
.author =
Preconditions.checkNotNull(author);