zoukankan      html  css  js  c++  java
  • 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,附上本人demo资源下载地址:http://download.csdn.net/download/luo201227/7581845。!!

    Ok。今天就到这里!

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


  • 相关阅读:
    java里如何实现对数组中的元素反转[4, 1, 8, 7, 3, 8, 2]变成 [2, 8, 3, 7, 8, 1, 4]
    牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
    [转]ASP.NET Web API对OData的支持
    [转]Work With Odata in Web API: Create Your First Odata Service
    [转]如何在 .Net Framework 4.0 项目上使用 OData?
    [转]Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)
    [转]使用WCF 4.0 构建 REST Service
    [转]构建基于WCF Restful Service的服务
    [转]asp.net5中使用NLog进行日志记录
    [转]浅谈 .NET Framework 与 .NET Core 的区别与联系
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5035627.html
Copyright © 2011-2022 走看看