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

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

  1. package com.joyce.guava.bean;
  2.  
  3. /**
  4. * 学生实体类
  5. *
  6. * @author Joyce.Luo
  7. * @date 2014-6-19 下午02:37:19
  8. */
  9. public class Student {
  10. /**
  11. * 学号
  12. */
  13. private Integer stuId;
  14. /**
  15. * 姓名
  16. */
  17. private String stuName;
  18. /**
  19. * 年龄
  20. */
  21. private Integer stuAge;
  22.  
  23. /**
  24. * @return the stuId
  25. */
  26. public Integer getStuId() {
  27. return stuId;
  28. }
  29.  
  30. /**
  31. * @param stuId
  32. * the stuId to set
  33. */
  34. public void setStuId(Integer stuId) {
  35. this.stuId = stuId;
  36. }
  37.  
  38. /**
  39. * @return the stuName
  40. */
  41. public String getStuName() {
  42. return stuName;
  43. }
  44.  
  45. /**
  46. * @param stuName
  47. * the stuName to set
  48. */
  49. public void setStuName(String stuName) {
  50. this.stuName = stuName;
  51. }
  52.  
  53. /**
  54. * @return the stuAge
  55. */
  56. public Integer getStuAge() {
  57. return stuAge;
  58. }
  59.  
  60. /**
  61. * @param stuAge
  62. * the stuAge to set
  63. */
  64. public void setStuAge(Integer stuAge) {
  65. this.stuAge = stuAge;
  66. }
  67.  
  68. /**
  69. *
  70. */
  71. public Student() {
  72. super();
  73. }
  74.  
  75. /**
  76. * @param stuId
  77. * @param stuName
  78. * @param stuAge
  79. */
  80. public Student(Integer stuId, String stuName, Integer stuAge) {
  81. super();
  82. this.stuId = stuId;
  83. this.stuName = stuName;
  84. this.stuAge = stuAge;
  85. }
  86. }

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

  1. /**
  2. * @Description:
  3. *
  4. * @Title: SetGuava.java
  5. * @Package com.joyce.guava.main
  6. * @Copyright: Copyright (c) 2014
  7. *
  8. * @author Comsys-LZP
  9. * @date 2014-6-26 上午11:03:53
  10. * @version V2.0
  11. */
  12. package com.joyce.guava.main;
  13.  
  14. import java.util.Collections;
  15. import java.util.List;
  16. import java.util.Map;
  17.  
  18. import com.google.common.collect.ArrayListMultimap;
  19. import com.google.common.collect.BiMap;
  20. import com.google.common.collect.ClassToInstanceMap;
  21. import com.google.common.collect.HashBasedTable;
  22. import com.google.common.collect.HashBiMap;
  23. import com.google.common.collect.HashMultiset;
  24. import com.google.common.collect.Lists;
  25. import com.google.common.collect.Multimap;
  26. import com.google.common.collect.Multiset;
  27. import com.google.common.collect.MutableClassToInstanceMap;
  28. import com.google.common.collect.Ordering;
  29. import com.google.common.collect.Table;
  30. import com.joyce.guava.bean.Student;
  31.  
  32. /**
  33. * @Description: Guava的集合
  34. *
  35. * @ClassName: SetGuava
  36. * @Copyright: Copyright (c) 2014
  37. *
  38. * @author Comsys-LZP
  39. * @date 2014-6-26 上午11:03:53
  40. * @version V2.0
  41. */
  42. public class SetGuava {
  43. public static void main(String[] args) {
  44. /**
  45. * Guava API 提供了实用的新的集合类型, 协同已经存在的java集合工作的非常好。 各自是 Multimap, Multiset,
  46. * Table, BiMap。 ClassToInstanceMap
  47. */
  48. System.out.println("Multimap:一种key能够反复的map,子类有ListMultimap和SetMultimap,相应的通过key分别得到list和set");
  49. testMultimap();
  50. System.out.println("Multiset:不是集合,能够添加反复的元素,而且能够统计出反复元素的个数");
  51. testMulitiset();
  52. System.out.println("Table:相当于有两个key的map");
  53. testTable();
  54. System.out.println("BiMap: 是一个一一映射,能够通过key得到value,也能够通过value得到key");
  55. testBitMap();
  56. System.out.println("ClassToInstanceMap:map的key并非仅仅是一种类型");
  57. testClassToInstanceMap();
  58. System.out.println("排序,是guava一份非常灵活的比較类,能够被用来操作。扩展,当作比較器,排序提供了集合排序的非常多控制 ");
  59. testOrder();
  60. }
  61.  
  62. /**
  63. * @Description: Multimap:一种key能够反复的map。子类有ListMultimap和SetMultimap。相应的通过key分别得到list和set
  64. *
  65. *
  66. * @Title: SetGuava.java
  67. * @Copyright: Copyright (c) 2014
  68. *
  69. * @author Comsys-LZP
  70. * @date 2014-6-26 上午11:19:50
  71. * @version V2.0
  72. */
  73. private static void testMultimap() {
  74. Multimap<String, Student> customersByType = ArrayListMultimap.create();
  75. customersByType.put("abc", new Student(1, "Joyce", 20));
  76. customersByType.put("abc", new Student(1, "Joyce One", 20));
  77. customersByType.put("abc", new Student(1, "Joyce Two", 20));
  78. customersByType.put("abc", new Student(1, "Joyce Three", 20));
  79. customersByType.put("abcd", new Student(1, "Joyce Four", 20));
  80. customersByType.put("abcde", new Student(1, "Joyce Five", 20));
  81. System.out.println(customersByType.get("abc").size());
  82. for (Student stu : customersByType.get("abc")) {
  83. System.out.println(stu.getStuName());
  84. }
  85. }
  86.  
  87. /**
  88. * @Description: Multiset:不是集合。能够添加反复的元素。而且能够统计出反复元素的个数
  89. *
  90. *
  91. * @Title: SetGuava.java
  92. * @Copyright: Copyright (c) 2014
  93. *
  94. * @author Comsys-LZP
  95. * @date 2014-6-26 上午11:19:59
  96. * @version V2.0
  97. */
  98. private static void testMulitiset() {
  99. Multiset<Integer> multiSet = HashMultiset.create();
  100. multiSet.add(10);
  101. multiSet.add(30);
  102. multiSet.add(30);
  103. multiSet.add(40);
  104. System.out.println(multiSet.count(30)); // 2 -- 统计XX出现的次数
  105. System.out.println(multiSet.size()); // 4 -- 元素的个数
  106. }
  107.  
  108. /**
  109. * @Description: Table:相当于有两个key的map
  110. *
  111. *
  112. * @Title: SetGuava.java
  113. * @Copyright: Copyright (c) 2014
  114. *
  115. * @author Comsys-LZP
  116. * @date 2014-6-26 上午11:24:43
  117. * @version V2.0
  118. */
  119. private static void testTable() {
  120. Table<Integer, Integer, Student> personTable = HashBasedTable.create();
  121. personTable.put(1, 20, new Student(1, "46546", 20));
  122. personTable.put(0, 30, new Student(2, "46546", 30));
  123. personTable.put(0, 25, new Student(3, "46546", 25));
  124. personTable.put(1, 50, new Student(4, "46546", 50));
  125. personTable.put(0, 27, new Student(5, "46546", 27));
  126. personTable.put(1, 29, new Student(6, "46546", 29));
  127. personTable.put(0, 38, new Student(7, "46546", 38));
  128. personTable.put(1, 66, new Student(8, "46546", 66));
  129.  
  130. // 得到行集合
  131. Map<Integer, Student> rowMap = personTable.row(0);
  132. Integer rowMax = Collections.max(rowMap.keySet());
  133. System.out.println(rowMax);
  134. }
  135.  
  136. /**
  137. * @Description: BiMap: 是一个一一映射。能够通过key得到value。也能够通过value得到key
  138. *
  139. *
  140. * @Title: SetGuava.java
  141. * @Copyright: Copyright (c) 2014
  142. *
  143. * @author Comsys-LZP
  144. * @date 2014-6-26 上午11:36:59
  145. * @version V2.0
  146. */
  147. private static void testBitMap() {
  148. // 双向map
  149. BiMap<Integer, String> biMap = HashBiMap.create();
  150. biMap.put(1, "hello");
  151. biMap.put(2, "helloa");
  152. biMap.put(3, "world");
  153. biMap.put(4, "worldb");
  154. biMap.put(5, "my");
  155. biMap.put(6, "myc");
  156. // 通过key取value
  157. String value = biMap.get(5);
  158. System.out.println("key -- [5] ; value -- [" + value + "]");
  159. // 通过value取key
  160. Integer key = biMap.inverse().get("my");
  161. System.out.println("value -- [my] ; key -- [" + key + "]");
  162. }
  163.  
  164. /**
  165. * @Description: ClassToInstanceMap:有的时候,你的map的key并非一种类型,他们是非常多类型,你想通过映射他们得到这样的类型,
  166. * guava提供了ClassToInstanceMap满足了这个目的。
  167. *
  168. * 除了继承自Map接口,ClassToInstaceMap提供了方法 T getInstance(Class<T>) 和
  169. * T putInstance(Class<T>, T),消除了强制类型转换。
  170.  
  171. *
  172. * 该类有一个简单类型的參数。通常称为B,代表了map控制的上层绑定,比如:
  173. * ClassToInstanceMap<Number> numberDefaults =
  174. * MutableClassToInstanceMap.create();
  175. * numberDefaults.putInstance(Integer.class,
  176. * Integer.valueOf(0));
  177. *
  178. * 从技术上来说,ClassToInstanceMap<B> 实现了Map<Class<? extends B>,
  179. * B>。或者说,这是一个从B的子类到B对象的映射,这可能使得ClassToInstanceMap的泛型轻度混乱。
  180. * 可是仅仅要记住B总是Map的上层绑定类型,通常来说B仅仅是一个对象。 guava提供了实用的实现。
  181. * MutableClassToInstanceMap 和 ImmutableClassToInstanceMap.
  182. * 重点:像其它的Map<Class,Object>,ClassToInstanceMap
  183. * 含有的原生类型的项目,一个原生类型和他的相应的包装类能够映射到不同的值;
  184. *
  185. *
  186. *
  187. * @Title: SetGuava.java
  188. * @Copyright: Copyright (c) 2014
  189. *
  190. * @author Comsys-LZP
  191. * @date 2014-6-26 上午11:42:52
  192. * @version V2.0
  193. */
  194. private static void testClassToInstanceMap() {
  195. ClassToInstanceMap<Student> classToInstanceMap = MutableClassToInstanceMap.create();
  196. Student stu = new Student(1, "Joyce", 20);
  197. classToInstanceMap.putInstance(Student.class, stu);
  198. Student stuObj = classToInstanceMap.getInstance(Student.class);
  199. System.out.println(stuObj.getStuName());
  200. }
  201.  
  202. /**
  203. * @Description:排序,是guava一份非常灵活的比較类。能够被用来操作。扩展,当作比較器,排序提供了集合排序的非常多控制
  204. *
  205. *
  206. * @Title: SetGuava.java
  207. * @Copyright: Copyright (c) 2014
  208. *
  209. * @author Comsys-LZP
  210. * @date 2014-6-26 上午11:49:30
  211. * @version V2.0
  212. */
  213. private static void testOrder(){
  214. List<Integer> numberList = Lists.newArrayList(30, 20, 60, 80, 10);
  215. System.out.println(Ordering.natural().sortedCopy(numberList)); //10,20,30,60,80
  216. System.out.println(Ordering.natural().reverse().sortedCopy(numberList)); //80,60,30,20,10
  217. System.out.println(Ordering.natural().min(numberList));//10
  218. System.out.println(Ordering.natural().max(numberList));//80
  219. numberList = Lists.newArrayList(30, 20, 60, 80, null, 10);
  220. System.out.println(Ordering.natural().nullsLast().sortedCopy(numberList));//10, 20,30,60,80,null
  221. System.out.println(Ordering.natural().nullsFirst().sortedCopy(numberList));//null,10,20,30,60,80
  222. }
  223. }

效果如图:

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. Android读取网络图片

    本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 在android4.0之后,已不同意在主线程中进行网络请求操作了, 否则会出现N ...

  2. python 时间戳 datetime string 转换

    import datetime import time **datetime转时间戳** In [1]: now = datetime.datetime.now() In [2]: time.mkti ...

  3. linux运维常用命令集

    1.删除0字节文件 find -type f -size 0 -exec rm -rf {} \;   2.查看进程 按内存从大到小排列 PS -e   -o "%C   : %p : %z ...

  4. 关于Thread类中三个interrupt方法的研究与学习(转)

    先看三个方法原型: public void interrupt(): public boolean isInterrupted(): public static boolean interrupted ...

  5. 树莓派玩耍笔记4 -- 树莓派ssh党必备的配置

    1. 关闭桌面显示 对于ssh 党.当然不须要系统花费资源在显示上. 所以我们先在 "raspi-conifg" 下选择默认启动为Text 启动(这好像也是Raspbian 的默认 ...

  6. hprose rpc使用实例(同时有Java和Delphi客户端的例子)

    php server <?php require_once('src/Hprose.php'); function hello($name) { echo "Hello $name!& ...

  7. 深入 CSocket 编程之阻塞和非阻塞模式

    有时,花上几个小时阅读.调试.跟踪优秀的源码程序,能够更快地掌握某些技术关键点和精髓.当然,前提是对这些技术大致上有一个了解. 我通过几个采用 CSocket 类编写并基于 Client/Server ...

  8. java垃圾回收那点事(二)不同gc策略的heap分配

    在前面的文章中曾提到了在java虚拟机启动的时候会对G1,CMS, SerialGC定义不同的heap的类,并且定义不同的policy. CollectorPolicy CollectorPolicy ...

  9. Wi-Fi万能钥匙:说是破解,其实有危险(转)

    Wi-Fi 万能钥匙如此危险,怎样做才能让这种可能严重侵害公众利益的 app 在中国消失? 这个“钥匙”为什么能够破解 Wi-Fi?它真的是“破解” Wi-Fi 吗?两年前我就有这个疑问了,原谅我对一 ...

  10. 定义自己的布局RelativeLayout 绘制网格线

    在Android画线必须由一个载体,无论是控制,无论是布局.实际上它们是从继承View.由画线的方式自己的控制或布局的定义是最常见的. 以下是在其定义中的小样本实现RelativeLayout绘制网络 ...