Google的Guava之Collection升华

至于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
	}
}

效果如图:

相信大家伙对上面的代码如果理解深入了的话,会明白了的!!!其实Guava在集合上面还提供了其他方法,这里就不一一分享了,有兴趣的大伙儿可以自己是私底下去好好研究一下!Guava资源下载地址:http://download.csdn.net/detail/luo201227/7207227,Ok,今天就到这里了!下次有机会再跟大家分享一下Guava中的其它升华。。。

Google的Guava之Collection升华

时间: 2024-10-06 11:44:13

Google的Guava之Collection升华的相关文章

Google的Guava之IO升华

程序猿在开发过程中,使用文件的几率是相当大的,有时候,我们甚至需要几十秒内读取一下IO流中的数据,但是原生态的文件流的读写,一旦操作不当,就有可能出现内存溢出和打开文件数过多的异常错误,这一点在Linux环境下表现得尤其突出,所以使用好原生态的读写文件流真的很重要!好啦,这里着重来讲一下Google的Guava对IO的操作升级,上一篇讲的Guava对Collection的优化,魅力之处尽在不言中了!Ok,咱就上代码了!这里使用文件来做Demo: /** * @Description: * * @

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

文章转载自:http://my.oschina.net/leejun2005/blog/172328 目录:[ - ] 1-使用 GOOGLE COLLECTIONS,GUAVA,STATIC IMPORTS 编写漂亮代码 1.Google Collections一览 2.操作lists和maps 3.静态导入和Eclipse模板 4.Guava走马观花 2-深入探索 GOOGLE GUAVA 库 1.The Guava CharMatcher 2.Joiner and Splitter 3.W

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

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

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

1.pom文件中配置 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <group

开源介绍:Google Guava、Google Guice、Joda-Time

一.Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦.下面我们就开启优雅Java编程学习之旅! 项目相关信息: 官方首页:http://code.googl

集合框架学习之Guava Collection

开源工具包: Guava : Google Collection Apache:Commons Collecton 1.1 Google Collections Guava:google的工程师利用传说中的"20%时间"开发的集合库,它是对jdk提供的扩展,提供了很多使用的类来简化代码 jar包:https://code.google.com/p/guava-libraries/ 源码下载: 下载git工具:(易于本地增加分支和分布式的特性) msysgit:http://code.g

Guava:好用的java类库 学习小记

基础功能 google guava中定义的String操作 在google guava中为字符串操作提供了很大的便利,有老牌的判断字符串是否为空字符串或者为null,用指定字符填充字符串,以及拆分合并字符串,字符串匹配的判断等等. 1. 使用com.google.common.base.Strings类的isNullOrEmpty(input)方法判断字符串是否为空 1 //Strings.isNullOrEmpty(input) demo 2 String input = ""; 3

android开发步步为营之70:android接入Google Analytics总结

求人不如求己,今天项目里要接入Google Analytics,这个是做应用统计分析用的,可以查看当前手机活跃用户,事件点击等等数据,先看看效果: 之前eclipse里面接入已经成功,昨天项目组决定项目转成使用android studio来开发,看google官方文档,官方文档https://developers.google.com/analytics/devguides/collection/android/v4/,然后官方文档里面的配置文件是用google-services.json的,这

java项目中使用guava的工具包的心得

原文:http://www.   zuidaima.com/blog/3182745969511424.htm 以前只是听过这个工具包,但是真正用的话还是在D75需求中.我要实现把前台传入的list集合用分号分割拼接一个字符串存入数据库, 开始的时候我用代码逻辑如下: StringBuffer interfaceList=new StringBuffer(); //判断前台绑定中的集合是否为空 if(interfaces!=null) { for(String str:interfaces){