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
- }
- }
效果如图:
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升华的更多相关文章
- Google的Guava之IO升华
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luo201227/article/details/36413279 程序员在开发过程中,使用文件的几 ...
- spring中添加google的guava缓存(demo)
1.pom文件中配置 <dependencies> <dependency> <groupId>org.springframework</groupId> ...
- Google的Guava类库简介(转)
说明:信息虽然有点旧,至少可以先了解个大概. Guava是一个Google的基于Java的类库集合的扩展项目,包括collections, caching, primitives support, c ...
- 有关google的guava工具包详细说明
Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库. 目前主要包含: com.google.common.annotations c ...
- Google的Guava工具类splitter和apache stringutil对比 编辑
一直用的是apache的stringutil工具类,其实google的工具类项目 guava中居然也有字符串的分隔类splitter的,在 http://code.google.com/p/guava ...
- Guava 教程1-使用 Google Collections,Guava,static imports 编写漂亮代码
原文出处: oschina (API:http://ifeve.com/category/framework/guava-2/ JAR DOC Source 链接:http://pan.baidu.c ...
- google中guava类库:AsyncEventBus
1.guava事件总线(AsyncEventBus)使用 1.1引入依赖 <dependency> <groupId>com.google.guava</groupId& ...
- 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. ...
- 使用 Google Guava 美化你的 Java 代码
文章转载自:http://my.oschina.net/leejun2005/blog/172328 目录:[ - ] 1-使用 GOOGLE COLLECTIONS,GUAVA,STATIC IMP ...
随机推荐
- Android读取网络图片
本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 在android4.0之后,已不同意在主线程中进行网络请求操作了, 否则会出现N ...
- python 时间戳 datetime string 转换
import datetime import time **datetime转时间戳** In [1]: now = datetime.datetime.now() In [2]: time.mkti ...
- linux运维常用命令集
1.删除0字节文件 find -type f -size 0 -exec rm -rf {} \; 2.查看进程 按内存从大到小排列 PS -e -o "%C : %p : %z ...
- 关于Thread类中三个interrupt方法的研究与学习(转)
先看三个方法原型: public void interrupt(): public boolean isInterrupted(): public static boolean interrupted ...
- 树莓派玩耍笔记4 -- 树莓派ssh党必备的配置
1. 关闭桌面显示 对于ssh 党.当然不须要系统花费资源在显示上. 所以我们先在 "raspi-conifg" 下选择默认启动为Text 启动(这好像也是Raspbian 的默认 ...
- hprose rpc使用实例(同时有Java和Delphi客户端的例子)
php server <?php require_once('src/Hprose.php'); function hello($name) { echo "Hello $name!& ...
- 深入 CSocket 编程之阻塞和非阻塞模式
有时,花上几个小时阅读.调试.跟踪优秀的源码程序,能够更快地掌握某些技术关键点和精髓.当然,前提是对这些技术大致上有一个了解. 我通过几个采用 CSocket 类编写并基于 Client/Server ...
- java垃圾回收那点事(二)不同gc策略的heap分配
在前面的文章中曾提到了在java虚拟机启动的时候会对G1,CMS, SerialGC定义不同的heap的类,并且定义不同的policy. CollectorPolicy CollectorPolicy ...
- Wi-Fi万能钥匙:说是破解,其实有危险(转)
Wi-Fi 万能钥匙如此危险,怎样做才能让这种可能严重侵害公众利益的 app 在中国消失? 这个“钥匙”为什么能够破解 Wi-Fi?它真的是“破解” Wi-Fi 吗?两年前我就有这个疑问了,原谅我对一 ...
- 定义自己的布局RelativeLayout
绘制网格线
在Android画线必须由一个载体,无论是控制,无论是布局.实际上它们是从继承View.由画线的方式自己的控制或布局的定义是最常见的. 以下是在其定义中的小样本实现RelativeLayout绘制网络 ...