关于guava集合的一些学习笔记

爱丹1219 爱丹1219     2022-08-31     591

关键词:

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);
System.out.println(rowMap.get(rowMax).getStuId());
}

/**
* @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
//
List<Student> list=Lists.newArrayList();
list.add(new Student(1,"aa",20));
list.add(new Student(2,"bb",10));
list.add(new Student(3,"cc",30));
list.add(new Student(4,"dd",15));
list.add(new Student(5,"ee",40));
//排序前
System.out.println("排序前");
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getStuName());
}
Collections.sort(list,new Comparator<Student>() {

@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
int age1=o1.getStuAge();
int age2=o2.getStuAge();

if(age1>age2){
return 1;
}else if(age1<age2){
return -1;
}else{
return 0;
}
}

});

//排序后
System.out.println("排序后");
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getStuName());
}
}

}

guava学习笔记概览

...对Guava没有一个系统的了解,为了更好的应用,准备好好学习一下这个优秀的开源工具包。Guava主页:https://github.com/google/guava,以下内容来自Guava—Wiki>>关 查看详情

guava学习--集合2

...,Map<LastName,Person>>来实现。为此Guava提供了一个新的集合类型-Table集合类型,来支持这种数据结构的使用场景。Table支持“row”和“column”,而且提供多种视图。 Table<String,Integer,Stri 查看详情

guava学习--集合1

Lists:其内部使用了静态工厂方法代替构造器,提供了许多用于List子类构造和操作的静态方法,我们简单的依次进行说明,如下:newArrayList():构造一个可变的、空的ArrayList实例。newArrayList(E...elements):构造一个可变的包含传入元... 查看详情

guava学习笔记:optional优雅的使用null

在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null。因为,只有我们深入的了解了null的相关知识,我们才能更加深入体会领悟到Guava的Optional设计和使用上的优雅和简单。   null代表不确定的对象:  Jav... 查看详情

关于cookie的一些学习笔记

0x00发现自己对一些原理性的东西实在是太不了解最近看了《cookie之困》记一下笔记 0x01因为http是无状态的所以需要cookie和session来保持http的会话状态和缓存信息设置cookie服务器写入  Set-Cookie:user=1;domain=.xxx.com;path=/脚本写入... 查看详情

guava学习笔记使用瓜娃(guava)的选择和预判断使代码变得简洁

1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code-with-guava-optionals-and-preconditions/,有说的不对的地方,欢迎斧正。2,我开发软件的时候,朝着干净代码发展是我的特权,有一段时间,我曾在我几乎所有的项目中使用谷... 查看详情

《学习opencv》笔记——关于一些画图的函数

画图函数(1)直线cvLine函数其结构voidcvLine(//画直线 CvArr*array,//画布图像 CvPointpt1,//起始点 CvPointpt2,//终点 CvScalarcolor,//颜色 intthickness=1,//宽度 intconnectivity=8//反走样);实例代码#include<cv.h>#include<highgui.h> 查看详情

有没有一种优雅的方法可以在使用 Guava 转换集合时删除空值?

...va?【发布时间】:2010-12-2015:10:16【问题描述】:我有一个关于在使用GoogleCollections时简化一些Collection处理代码的问题(更新:Guava)。我有一堆“计算机”对象,我想以它们的“资 查看详情

关于this的一些学习笔记(代码片段)

关于可以指定this的apply()、call()函数apply()和call()函数都可以指定this值和参数值的情况下调用某个函数。call()和apply()的作用一样,区别在于提供给原函数的参数的方式不一样apply()函数只接受两个参数,提供给原函数的参... 查看详情

java集合_学习笔记

一、集合  1、集合类也称容器类,主要负责保存、盛装其他数据。  2、集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组)。  3、Java5后提供一些多线程安全的集合类,放在java.util.concurrrent。(u... 查看详情

集合框架学习笔记

集合框架由来  Java2之前,Java是没有完整的集合框架的.它只有一些简单的可以自扩容的容器类,比如Vector,Stack,Hashtable等  为什么存在容器(可以存储多个数据) 数组的弊端:   1,长度是不可变的,一旦数组初始化之后,长度是固... 查看详情

关于线段树的一些学习笔记——(无限施工中)

  (施工中orz)  20171223:更新一些关于线段树的基础用法,以及简单的zkw线段树、权值线段树,动态开点线段树,线段树的标记永久化,主席树,可持久化线段树,可持久化线段树的标记永久化(施工中)  这几天学了... 查看详情

list集合学习笔记

一、ArrayList(a)与LikedList(L)的区别  1、a的内部实现基于数组,而L则基于循环双向链表实现  2、a的初始容量为10,当数据达到上限会进行自动扩容,机制为(旧容量*3)/2-1,因此每次扩容会造成一定的容量溢出,可以用... 查看详情

kotlin学习的一些笔记

Introduction写在前面关于本书这本书适合你吗?关于作者介绍什么是Kotlin?我们通过Kotlin得到什么准备工作AndroidStudio安装Kotlin插件创建一个新的项目在AndroidStudio中创建一个项目配置Gradle把MainActivity转换成Kotlin代码测试是否一切就... 查看详情

guava学习二(集合并发文件)(代码片段)

不可变集合ImmutableXXX系列,of,copyOf,builder构造JDK也提供了Collections.unmodifiableXXX方法把集合包装为不可变形式所有的Immutable系列均不接受null所有的Immutable系列提供ImmutableList方法方面读取集合中内容//有意思的builder写法ImmutableSet&... 查看详情

关于dom的一些笔记

  这篇文章整理的是关于DOM的一些学习笔记,这样以后查找起来也方便许多。(以前js看的是入门经典和DOM编程艺术,现在在看高级程序设计,本文就以高级程序为主整理)  1、Node    Node.nodeType:返回节点类型(一共... 查看详情

关于kubernetes集群中常见问题的排查方法的一些笔记

...思想,读着乏味,这里先列出干货:一些查问题的网站,关于内容之后有机会在补充 查看详情

guava学习--file

...,比如:移动或复制文件,或读取文件内容到一个字符串集合Closer类,提供了一种非常干净的方式,确保Closeable实例被正确的关闭ByteSource和CharSource类,提供了不可变的输入流(Input)和读(Reader)ByteSink和CharSink类,提供了不可... 查看详情