Guava的使用
package guava; import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; 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);
}
}
Guava的使用的更多相关文章
- Spring cache简单使用guava cache
Spring cache简单使用 前言 spring有一套和各种缓存的集成方式.类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guava cache. [TOC ...
- Guava库介绍之实用工具类
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...
- Google Java编程库Guava介绍
本系列想介绍下Java下开源的优秀编程库--Guava[ˈgwɑːvə].它包含了Google在Java项目中使用一些核心库,包含集合(Collections),缓存(Caching),并发编程库(C ...
- [Java 缓存] Java Cache之 Guava Cache的简单应用.
前言 今天第一次使用MarkDown的形式发博客. 准备记录一下自己对Guava Cache的认识及项目中的实际使用经验. 一: 什么是Guava Guava工程包含了若干被Google的 Java项 ...
- [转载]Google Guava官方教程(中文版)
原文链接 译文链接 译者: 沈义扬,罗立树,何一昕,武祖 校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] ...
- java开发人员,最应该学习和熟练使用的工具类。google guava.(谷歌 瓜娃)
学习参考文章: http://blog.csdn.net/wisgood/article/details/13297535 http://ifeve.com/google-guava/ http:// ...
- Guava学习笔记(一)概览
Guava是谷歌开源的一套Java开发类库,以简洁的编程风格著称,提供了很多实用的工具类, 在之前的工作中应用过Collections API和Guava提供的Cache,不过对Guava没有一个系统 ...
- Guava monitor
Guava的com.google.util.concurrent类库提供了相对于jdk java.util.concurrent包更加方便实用的并发类,Monitor类就是其中一个.Monitor类在 ...
- 使用Guava EventBus构建publish/subscribe系统
Google的Guava类库提供了EventBus,用于提供一套组件内publish/subscribe的解决方案.事件总线EventBus,用于管理事件的注册和分发.在系统中,Subscribers ...
- Guava Supplier实例
今天想讲一下Guava Suppliers的几点用法.Guava Suppliers的主要功能是创建包裹的单例对象,通过get方法可以获取对象的值.每次获取的对象都为同一个对象,但你和单例模式有所区别 ...
随机推荐
- Yii2使用驼峰命名的形式访问控制器
yii2在使用的时候,访问控制器的时候,如果控制器的名称是驼峰命名法,那访问的url中要改成横线的形式.例如: public function actionRoomUpdate() { // }//访 ...
- Linux下文件特殊权限
SUIDSUID表示在所有者的位置上出现了s在一个命令的所有者的权限上如果出现了s,当其他人在执行该命令的时候将具有所有者的权限.SUID权限仅对二进制文件有效 SGID表示在组的位置上出现了s如果一 ...
- c++ primer 9 顺序容器
定义: #include <vector> #include <list> #include <deque> vector<int> svec; lis ...
- WPS Office 2012 专业版 附正版序列号
WPS Office 2012 专业版 附正版序列号 首先说说WPS的研发历史沿革:1988年5月,一个名叫求伯君的程序员凭借一台386电脑写出了WPS 1.0,从此开创了中文字处理时代,并迅速占领中 ...
- loadrunner字符串转换函数
- 爱奇艺全国高校算法大赛初赛A
$01$背包. 数据范围:物品个数小于等于$3000$,背包大小小于等于$1000000$. $map<int,long long>dp$,用$map$去做$dp$,可以少遍历很多状态,可 ...
- openstack多region配置
实验 A机器 10.64.8.171 RegionOne B机器 10.64.8.142 RegionTwo Keytson(这个组件随便放在哪台都可以) openst ...
- 二. 创建Series和DataFrame对象
创建对象 创建Series对象 Series可以通过列表,标量值,字典,ndarray,其他函数来创建 a = pf.Series([1,2,3,4]) # 列表创建 b = pd.Series(25 ...
- PHP定义字符串
<?php /** * 定义字符串 * '单引号, ""双引号, <<<定界符 * * 单引号和双引号的区别:双引号可以正常解析变量,单引号不能 * 通过大 ...
- 1.7(SQL学习笔记)游标
一.游标简介 SELECT语句得到的是一个结果集,有时我们需要对结果集中的单条数据进行处理. 这时就需要使用游标,游标定义时和一个SELECT语句的结果集关联在一起. 游标执行这个结果集,可以在结果集 ...