文档章节

Guava Collections

山东和湖北
 山东和湖北
发布于 2016/05/12 18:13
字数 1180
阅读 8
收藏 0
点赞 2
评论 0

以下是练习的代码:

package guavaCollections;

import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.*;

import java.util.*;

/**
 * User: zhaoyun
 * Date: 16-5-12
 * Time: 上午10:00
 */
public class GuavaCollections {

    public static void main(String[] args){

        //简化集合的创建
        List<List<Map<String, String>>> list = Lists.newArrayList();
        List<String> stringList= Lists.newLinkedList();
        Set<String> stringSet= Sets.newHashSet();
        Map<String,String> stringMap= Maps.newHashMap();
        Integer[] intArrays= ObjectArrays.newArray(Integer.class, 10);

        //简化集合的初始化
        List<String> initArrayList = Lists.newArrayList("a","b","c");
        List<String> initLinkedList= Lists.newLinkedList(initArrayList);
        Set<String> initSet= Sets.newHashSet("1","2","3");
        Map<String,String> initMap= ImmutableMap.of("a","1","b","2","c","3");
        Integer[] initIntArrays= ObjectArrays.newArray(Integer.class, 10); // type 和 length

        //不变性
        ImmutableList<String> immutableList0 = ImmutableList.of("a","b","c"); //因为add 和 remove等方法已被禁止
        ImmutableSet<Integer> immutableSet0 = ImmutableSet.of(1,2,3);
        ImmutableMap<String,String> immutableMap0 = ImmutableMap.of("a","1","b","2","c","3");
        ImmutableList<String> immutableList1 = ImmutableList.copyOf(immutableList0);    //使用copy创建
        ImmutableSet immutableSet1 = ImmutableSet.copyOf(immutableSet0);
        ImmutableMap<String,String> immutableMap1 = ImmutableMap.copyOf(immutableMap0);
        ImmutableList<String> immutableList2 = ImmutableList.<String>builder().addAll(immutableList0) .add("d") .add("e").add("f").build();  //使用build创建
        ImmutableMap<String,String> immutableMap2 = ImmutableMap.<String,String>builder().put("d","4").putAll(immutableMap0).build();

        //新的集合类型
        //MultiMap     key可以重复的Map
        Multimap<String,String> multiMap = ArrayListMultimap.create();
        multiMap.put("a","b");
        multiMap.put("a","c");
        List<String> mapValues = ImmutableList.copyOf(multiMap.get("a"));

        // Table  key field value
        Table<String,String,String> table = HashBasedTable.create();
        table.put("a","b","c");

        //BiMap 映射 可以通过key找value 也可以通过value找key
        BiMap<String,Integer> biMap = HashBiMap.create();
        biMap.put("a",1);
        System.out.println(biMap.get("a"));
        System.out.println(biMap.inverse().get(1));

        //Predicate 筛选集合
        initArrayList = ImmutableList.copyOf(Collections2.filter(initArrayList,new Predicate<String>() {
            @Override
            public boolean apply( java.lang.String input) {
                return "a".equals(input);
            }
        }));


        //集合排序  简单排序

        /*Ordering
        常用静态方法
            natural():使用Comparable类型的自然顺序, 例如:整数从小到大,字符串是按字典顺序;
            usingToString() :使用toString()返回的字符串按字典顺序进行排序;
            arbitrary() :返回一个所有对象的任意顺序, 即compare(a, b) == 0 就是 a == b (identity equality)。 本身的排序是没有任何含义, 但是在VM的生命周期是一个常量。

        常用操作方法:
          reverse(): 返回与当前Ordering相反的排序:
          nullsFirst(): 返回一个将null放在non-null元素之前的Ordering,其他的和原始的Ordering一样;
          nullsLast():返回一个将null放在non-null元素之后的Ordering,其他的和原始的Ordering一样;
          compound(Comparator):返回一个使用Comparator的Ordering,Comparator作为第二排序元素,例如对bug列表进行排序,先根据bug的级别,再根据优先级进行排序;
          lexicographical():返回一个按照字典元素迭代的Ordering;
          onResultOf(Function):将function应用在各个元素上之后, 在使用原始ordering进行排序;
          greatestOf(Iterable iterable, int k):返回指定的第k个可迭代的最大的元素,按照这个从最大到最小的顺序。是不稳定的。
          leastOf(Iterable<E> iterable,int k):返回指定的第k个可迭代的最小的元素,按照这个从最小到最大的顺序。是不稳定的。
          isOrdered(Iterable):是否有序,Iterable不能少于2个元素。
          isStrictlyOrdered(Iterable):是否严格有序。请注意,Iterable不能少于两个元素。
          sortedCopy(Iterable):返回指定的元素作为一个列表的排序副本。
        */

        Ordering naturalOrdering = Ordering.natural();
        Ordering<Object> usingToStringOrdering = Ordering.usingToString();
        Ordering<Object> arbitraryOrdering = Ordering.arbitrary();

        List<Integer> orderList0 = Lists.newArrayList(7,2,4,3,5,6,1);
        List<String> orderList1 = Lists.newArrayList("c","b","a",null,"e","f");
        System.out.println("order0 :" + naturalOrdering.nullsLast().sortedCopy(orderList0));
        System.out.println("order0 desc :" +naturalOrdering.nullsLast().reverse().sortedCopy(orderList0));
        System.out.println("order1 :" + usingToStringOrdering.nullsLast().sortedCopy(orderList1));
        System.out.println("order1 desc :" + usingToStringOrdering.reverse().nullsLast().sortedCopy(orderList1));

        //对象的排序
        List<User> userList = Lists.newArrayList(new User(2L,"z","PWD2",40,new Date()),new User(1L,"b","PWD1",31,new Date()),new User(3L,"c","PWD3",1,new Date()));

        Ordering<User> userOrdering = new Ordering<User>() {
            @Override
            public int compare( User left, User right) {
                return left.getAge()-right.getAge();
            }
        };
        //根据age排序
        Ordering<User> orderingByUserName = Ordering.natural().nullsFirst().onResultOf(new Function<User,String>(){
            @Override
            public String apply( guavaCollections.User user) {
                return user.getUserName();
            }
        });
        //根据userId 排序
        Ordering<User> orderingByUserId = Ordering.natural().nullsFirst().onResultOf(new Function<User,Long>(){
            @Override
            public Long apply(User user) {
                return user.getId();
            }
        });
        //根据创建时间排序
        Ordering<User> orderingByUserDate = Ordering.natural().nullsFirst().onResultOf(new Function<User,Date>(){
            @Override
            public Date apply(User user) {
                return user.getCreateDate();
            }
        });
        //检查指定的 Iterable 根据ordering的排序规则是否有序
        boolean isOrdered = orderingByUserId.isOrdered(userList);

        //根据age排序
        userList = userOrdering.sortedCopy(userList);

        //根据ordering的排序规则,返回参数 iterable 的k个最大值。
        userList = orderingByUserId.greatestOf(userList,2);

        //两者之间比较出最小的 如果相等返回第一个元素
        User userMin = orderingByUserDate.min(new User(2L,"z","PWD2",40,new Date()),new User(1L,"b","PWD1",31,new Date()));
        //两者之间比较出最小的 如果相等返回第一个元素
        User userMax = orderingByUserName.max(new User(2L,"z","PWD2",40,new Date()),new User(1L,"b","PWD1",31,new Date()));

    }

}

User实体:

package guavaCollections;

import java.io.Serializable;
import java.util.Date;

/**
 * User: zhaoyun
 * Date: 16-5-12
 * Time: 下午1:58
 * 用户实体
 */
public class User implements Serializable{

    private static final long serialVersionUID = 8031997690938886371L;

    public User(){}
    public User(long id,String userName,String passWord,int age,Date createDate){
        this.id = id;
        this.userName = userName;
        this.passWord = passWord;
        this.age = age;
        this.createDate = createDate;
    }

    private long id;

    private String userName;

    private String passWord;

    private int age;

    private Date createDate;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public Date getCreateDate() {
        return createDate;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

 

© 著作权归作者所有

共有 人打赏支持
山东和湖北
粉丝 0
博文 6
码字总数 4761
作品 0
昌平
程序员
Guava 相关文章

========= Guava and Hamcrest Cookbooks and Examples Relevant Articles: Guava Collections Cookbook Guava Ordering Cookbook Guava Functional Cookbook Hamcrest Collections Cookbook......

小骏骏
2016/01/29
263
0
Google Guava 笔记

一、引言 Guava 是 google 几个java核心类库的集合,包括集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common ...

qllinhongyu
2014/09/18
0
0
Google Guava Collections 使用介绍

Google Guava Collections(以下都简称为 Guava Collections)是 Java Collections Framework 的增强和扩展。每个 Java 开发者都会在工作中使用各种数据结构,很多情况下 Java Collections F...

毒性逆转
2011/11/17
0
1
java中Final关键字和Immutable Class以及Guava的不可变对象

大纲 写这篇文章的起因 java中Final关键字 如何构建不可变对象 Guava中不可变对象和Collections工具类的unmodifiableSet/List/Map/etc的区别 实验代码 写这篇文章的起因 java项目在使用FindB...

敲代码猥琐男
2015/09/23
1K
0
Guava-使用向导

Guava中包含了Google的一些核心类库:比如集合,缓存,并发包,常用注解,字符串处理,I/O等等。这些工具类被谷歌的工程师们经常用到。 但是通过查阅文档不是一个有效的学习类库的方式。这儿,...

stefanzhlg
2015/09/29
174
0
Guava Collections使用介绍[超级强大]

功能列举 可以说 Java Collections Framework 满足了我们大多数情况下使用集合的要求,但是当遇到一些特殊的情况我们的代码会比较冗长,比较容易出错。Guava Collections 可以帮助你的代码更...

飞翼
2016/12/13
24
0
使用 Google Guava 美化你的 Java 代码:1~4

1-使用 GOOGLE COLLECTIONS,GUAVA,STATIC IMPORTS 编写漂亮代码 写在前面: 以前在一个项目中用到过guava,当时匆匆用,也没细研究,今天偶然在occhina看到这个系列教程的翻译,感觉不错,介...

大数据之路
2013/10/28
0
7
Guava学习笔记:Google Guava 类库简介

Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这......

长平狐
2013/06/17
556
0
Google Guava 类库简介(1)

Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这......

十二缸帕萨特
2015/10/07
31
0
Google Guava教程

Google Guava官方教程(中文版) 原文链接 译文链接 译者: 沈义扬,罗立树,何一昕,武祖 校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [colle...

casoc
2015/10/12
343
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

微信小程序Java登录流程(ssm实现具体功能和加解密隐私信息问题解决方案)

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、登录流程图 二、小程序客户端 doLogin:function(callback = () =>{}){let ...

公众号_好好学java
30分钟前
0
0
流利阅读笔记28-20180717待学习

“我不干了!” 英国脱欧大臣递交辞呈 雪梨 2018-07-17 1.今日导读 7 月 6 日,英国政府高官齐聚英国首相的官方乡间别墅——契克斯庄园,讨论起草了一份关于英国政府脱欧立场的白皮书。可是没...

aibinxiao
今天
6
0
OSChina 周二乱弹 —— 理解超算排名这个事,竟然超出了很多人的智商

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @-冰冰棒- :分享Ed Sheeran/Beyoncé的单曲《Perfect Duet (with Beyoncé)》 《Perfect Duet (with Beyoncé)》- Ed Sheeran/Beyoncé 手机...

小小编辑
今天
93
7
Android 获取各大音乐平台的真实下载地址

废话 电脑使用谷歌浏览器或者QQ浏览器的时候。。。。。。。说不清楚,还是看图吧 大概意思就是,只要网页上需要播放,只要能播放并且开始播放,这个过程就肯定会请求到相关的音乐资源,然后就...

她叫我小渝
今天
0
0
shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
1
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部