至于Guava这是不是在这里说。一个已被提上一个非常特殊的!

这主要是为了分享Guava对于一些升华处理组。井,不多说了,直接在代码:

package com.joyce.guava.bean;

/**
* 学生实体类
*
* @author Joyce.Luo
* @date 2014-6-19 下午02:37:19
*/
public class Student {
/**
* 学号
*/
private Integer stuId;
/**
* 姓名
*/
private String stuName;
/**
* 年龄
*/
private Integer stuAge; /**
* @return the stuId
*/
public Integer getStuId() {
return stuId;
} /**
* @param stuId
* the stuId to set
*/
public void setStuId(Integer stuId) {
this.stuId = stuId;
} /**
* @return the stuName
*/
public String getStuName() {
return stuName;
} /**
* @param stuName
* the stuName to set
*/
public void setStuName(String stuName) {
this.stuName = stuName;
} /**
* @return the stuAge
*/
public Integer getStuAge() {
return stuAge;
} /**
* @param stuAge
* the stuAge to set
*/
public void setStuAge(Integer stuAge) {
this.stuAge = stuAge;
} /**
*
*/
public Student() {
super();
} /**
* @param stuId
* @param stuName
* @param stuAge
*/
public Student(Integer stuId, String stuName, Integer stuAge) {
super();
this.stuId = stuId;
this.stuName = stuName;
this.stuAge = stuAge;
}
}

实体类有了。主要是为了在集合中使用提供方便。关键在于:

/**
* @Description:
*
* @Title: SetGuava.java
* @Package com.joyce.guava.main
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:03:53
* @version V2.0
*/
package com.joyce.guava.main; import java.util.Collections;
import java.util.List;
import java.util.Map; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.BiMap;
import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.HashBiMap;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multiset;
import com.google.common.collect.MutableClassToInstanceMap;
import com.google.common.collect.Ordering;
import com.google.common.collect.Table;
import com.joyce.guava.bean.Student; /**
* @Description: Guava的集合
*
* @ClassName: SetGuava
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:03:53
* @version V2.0
*/
public class SetGuava {
public static void main(String[] args) {
/**
* Guava API 提供了实用的新的集合类型, 协同已经存在的java集合工作的非常好。 各自是 Multimap, Multiset,
* Table, BiMap。 ClassToInstanceMap
*/
System.out.println("Multimap:一种key能够反复的map,子类有ListMultimap和SetMultimap,相应的通过key分别得到list和set");
testMultimap();
System.out.println("Multiset:不是集合,能够添加反复的元素,而且能够统计出反复元素的个数");
testMulitiset();
System.out.println("Table:相当于有两个key的map");
testTable();
System.out.println("BiMap: 是一个一一映射,能够通过key得到value,也能够通过value得到key");
testBitMap();
System.out.println("ClassToInstanceMap:map的key并非仅仅是一种类型");
testClassToInstanceMap();
System.out.println("排序,是guava一份非常灵活的比較类,能够被用来操作。扩展,当作比較器,排序提供了集合排序的非常多控制 ");
testOrder();
} /**
* @Description: Multimap:一种key能够反复的map。子类有ListMultimap和SetMultimap。相应的通过key分别得到list和set
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:19:50
* @version V2.0
*/
private static void testMultimap() {
Multimap<String, Student> customersByType = ArrayListMultimap.create();
customersByType.put("abc", new Student(1, "Joyce", 20));
customersByType.put("abc", new Student(1, "Joyce One", 20));
customersByType.put("abc", new Student(1, "Joyce Two", 20));
customersByType.put("abc", new Student(1, "Joyce Three", 20));
customersByType.put("abcd", new Student(1, "Joyce Four", 20));
customersByType.put("abcde", new Student(1, "Joyce Five", 20));
System.out.println(customersByType.get("abc").size());
for (Student stu : customersByType.get("abc")) {
System.out.println(stu.getStuName());
}
} /**
* @Description: Multiset:不是集合。能够添加反复的元素。而且能够统计出反复元素的个数
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:19:59
* @version V2.0
*/
private static void testMulitiset() {
Multiset<Integer> multiSet = HashMultiset.create();
multiSet.add(10);
multiSet.add(30);
multiSet.add(30);
multiSet.add(40);
System.out.println(multiSet.count(30)); // 2 -- 统计XX出现的次数
System.out.println(multiSet.size()); // 4 -- 元素的个数
} /**
* @Description: Table:相当于有两个key的map
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:24:43
* @version V2.0
*/
private static void testTable() {
Table<Integer, Integer, Student> personTable = HashBasedTable.create();
personTable.put(1, 20, new Student(1, "46546", 20));
personTable.put(0, 30, new Student(2, "46546", 30));
personTable.put(0, 25, new Student(3, "46546", 25));
personTable.put(1, 50, new Student(4, "46546", 50));
personTable.put(0, 27, new Student(5, "46546", 27));
personTable.put(1, 29, new Student(6, "46546", 29));
personTable.put(0, 38, new Student(7, "46546", 38));
personTable.put(1, 66, new Student(8, "46546", 66)); // 得到行集合
Map<Integer, Student> rowMap = personTable.row(0);
Integer rowMax = Collections.max(rowMap.keySet());
System.out.println(rowMax);
} /**
* @Description: BiMap: 是一个一一映射。能够通过key得到value。也能够通过value得到key
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:36:59
* @version V2.0
*/
private static void testBitMap() {
// 双向map
BiMap<Integer, String> biMap = HashBiMap.create();
biMap.put(1, "hello");
biMap.put(2, "helloa");
biMap.put(3, "world");
biMap.put(4, "worldb");
biMap.put(5, "my");
biMap.put(6, "myc");
// 通过key取value
String value = biMap.get(5);
System.out.println("key -- [5] ; value -- [" + value + "]");
// 通过value取key
Integer key = biMap.inverse().get("my");
System.out.println("value -- [my] ; key -- [" + key + "]");
} /**
* @Description: ClassToInstanceMap:有的时候,你的map的key并非一种类型,他们是非常多类型,你想通过映射他们得到这样的类型,
* guava提供了ClassToInstanceMap满足了这个目的。
*
* 除了继承自Map接口,ClassToInstaceMap提供了方法 T getInstance(Class<T>) 和
* T putInstance(Class<T>, T),消除了强制类型转换。 *
* 该类有一个简单类型的參数。通常称为B,代表了map控制的上层绑定,比如:
* ClassToInstanceMap<Number> numberDefaults =
* MutableClassToInstanceMap.create();
* numberDefaults.putInstance(Integer.class,
* Integer.valueOf(0));
*
* 从技术上来说,ClassToInstanceMap<B> 实现了Map<Class<? extends B>,
* B>。或者说,这是一个从B的子类到B对象的映射,这可能使得ClassToInstanceMap的泛型轻度混乱。
* 可是仅仅要记住B总是Map的上层绑定类型,通常来说B仅仅是一个对象。 guava提供了实用的实现。
* MutableClassToInstanceMap 和 ImmutableClassToInstanceMap.
* 重点:像其它的Map<Class,Object>,ClassToInstanceMap
* 含有的原生类型的项目,一个原生类型和他的相应的包装类能够映射到不同的值;
*
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:42:52
* @version V2.0
*/
private static void testClassToInstanceMap() {
ClassToInstanceMap<Student> classToInstanceMap = MutableClassToInstanceMap.create();
Student stu = new Student(1, "Joyce", 20);
classToInstanceMap.putInstance(Student.class, stu);
Student stuObj = classToInstanceMap.getInstance(Student.class);
System.out.println(stuObj.getStuName());
} /**
* @Description:排序,是guava一份非常灵活的比較类。能够被用来操作。扩展,当作比較器,排序提供了集合排序的非常多控制
*
*
* @Title: SetGuava.java
* @Copyright: Copyright (c) 2014
*
* @author Comsys-LZP
* @date 2014-6-26 上午11:49:30
* @version V2.0
*/
private static void testOrder(){
List<Integer> numberList = Lists.newArrayList(30, 20, 60, 80, 10);
System.out.println(Ordering.natural().sortedCopy(numberList)); //10,20,30,60,80
System.out.println(Ordering.natural().reverse().sortedCopy(numberList)); //80,60,30,20,10
System.out.println(Ordering.natural().min(numberList));//10
System.out.println(Ordering.natural().max(numberList));//80
numberList = Lists.newArrayList(30, 20, 60, 80, null, 10);
System.out.println(Ordering.natural().nullsLast().sortedCopy(numberList));//10, 20,30,60,80,null
System.out.println(Ordering.natural().nullsFirst().sortedCopy(numberList));//null,10,20,30,60,80
}
}

效果如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHVvMjAxMjI3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

相信大家伙对上面的代码假设理解深入了的话。会明确了的!。!

事实上Guava在集合上面还提供了其他方法,这里就不一一分享了,有兴趣的大伙儿能够自己是私底下去好好研究一下!Guava资源下载地址:http://download.csdn.net/detail/luo201227/7207227,附上本人demo资源下载地址:http://download.csdn.net/download/luo201227/7581845。!!

Ok。今天就到这里!

下次有机会交谈,与大家分享Guava其他升华。。

Google的Guava它Collection升华的更多相关文章

  1. Google的Guava之IO升华

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luo201227/article/details/36413279 程序员在开发过程中,使用文件的几 ...

  2. spring中添加google的guava缓存(demo)

    1.pom文件中配置 <dependencies> <dependency> <groupId>org.springframework</groupId> ...

  3. Google的Guava类库简介(转)

    说明:信息虽然有点旧,至少可以先了解个大概. Guava是一个Google的基于Java的类库集合的扩展项目,包括collections, caching, primitives support, c ...

  4. 有关google的guava工具包详细说明

    Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库. 目前主要包含: com.google.common.annotations c ...

  5. Google的Guava工具类splitter和apache stringutil对比 编辑

    一直用的是apache的stringutil工具类,其实google的工具类项目 guava中居然也有字符串的分隔类splitter的,在 http://code.google.com/p/guava ...

  6. Guava 教程1-使用 Google Collections,Guava,static imports 编写漂亮代码

    原文出处: oschina (API:http://ifeve.com/category/framework/guava-2/ JAR DOC Source 链接:http://pan.baidu.c ...

  7. google中guava类库:AsyncEventBus

    1.guava事件总线(AsyncEventBus)使用 1.1引入依赖 <dependency> <groupId>com.google.guava</groupId& ...

  8. Google Guava vs Apache Commons for Argument Validation

    It is an established good practice to validate method arguments at the beginning of the method body. ...

  9. 使用 Google Guava 美化你的 Java 代码

    文章转载自:http://my.oschina.net/leejun2005/blog/172328 目录:[ - ] 1-使用 GOOGLE COLLECTIONS,GUAVA,STATIC IMP ...

随机推荐

  1. linux下修改hostid

    linux下修改hostid 网上有很多版本,总结了这几点. 1> 一个以16进制显示的int字符串: 2> 配置文件: /etc/hostid; 如果有值,输出, 结束. 3> 从 ...

  2. 表空间的状态(二) - read/write

    表空间状态-READ ONLY.READ WRITE 1. 仅仅读表空间的主要用途就是为了消除对数据库大部分静态数据的备份和恢复的须要.Oracle不会更新仅仅读表空间爱你的文件.因此这部分文件能够存 ...

  3. 怎样用Java编写一段代码引发内存泄露

    通过下面步骤能够非常easy产生内存泄露(程序代码不能訪问到某些对象,可是它们仍然保存在内存中): 应用程序创建一个长时间执行的线程(或者使用线程池,会更快地发生内存泄露). 线程通过某个类载入器(能 ...

  4. ACM-简单题之Factorial——poj1401

    转载请注明出处:http://blog.csdn.net/lttree Factorial Time Limit: 1500MS   Memory Limit: 65536K Total Submis ...

  5. 高度关注!国务院对A股发出强烈信号↓

    高度关注!国务院对A股发出强烈信号↓http://dwz.cn/2qHBd1郎咸平:中国股市存在一大隐疾 使其成为全球市场的一个另类!http://dwz.cn/2qHBVy一不小心,马云又完成了四场 ...

  6. Android 异步链式调用设计

    本文讨论一下异步链式调用的设计与实现. 考虑如下情况: 情况1: 访问网络(或其他耗时的事情).通常的做法是: 1.显示一个ProgressDialog对话框,提示用户. 2.启动工作线程来执行耗时操 ...

  7. JavaScript之面向对象1

    学习过Java程序的开发人员都知道面向对象是怎么回事. 面向对象无非就是封装.多态.继承 比如: 声明一个类: class Person{ //私有成员 private String name; pr ...

  8. bootstrap css选择不同的宽度

    刚开始使用bootstrap css开源项目.遇到一个问题,默认的input 宽度太大,需要找小一点的. 其实只需要在input tag中选用预定义的较小的宽度即可.比如: <input typ ...

  9. block存储区域——怎样验证block在栈上,还是堆上

    Block存储区域 首先,须要引入三个名词: ● _NSConcretStackBlock ● _NSConcretGlobalBlock ● _NSConcretMallocBlock 正如它们名字 ...

  10. 在后台运行erlang;在需要时连回交互模式

    * 1. 启动后台运行的erlang环境 按以下命令: erl -detached -name a@127.0.0.1 注意,-name的值必须是xxxx@ip的形式.其中xxxx是英文名,ip必须是 ...