资讯专栏INFORMATION COLUMN

有用的guava(一)

张宪坤 / 1021人阅读

摘要:尼古拉斯沃兹基硕德我们已经有了,为什么还需要另外一个库呢因为好用呗日常编码中经常会遇到下面的代码经过的修剪后可以变成这样甚至这样其实这种结构,就是一个二维映射,把它包装成了。但的完美处理双向映射。当然,在使用时,会要求的唯一性。

Google Guava是把小巧又锋利的瑞士军刀,把你的代码修剪得整洁又漂亮。
-------------尼古拉斯·沃兹基硕德

1. Google Collections

我们已经有Apache Commons Collections了,为什么还需要另外一个collections库呢?
因为好用呗!

日常编码中经常会遇到下面的代码:

Map> map = new HashMap>();

经过Guava的修剪后可以变成这样:

Map> map = Maps.newHashMap();

甚至这样:

Table tab = HashBaseTable.create();
//其实这种结构,就是一个二维映射,Guava把它包装成了table。
//还没完,变成这样后,访问起来比之前方便多了,直接拿两个维度去拿结果。
String res = tab.get("1", "1");

当然Lists和Sets也有这样的用法:
Lists.newArrayList();
Sets.newHashSet();

有时候我们需要一些测试数据构造一个不可变的List,一般都会这么写:

List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");

有了Guava可以这样:

ImmutableList of = ImmutableList.of("a", "b", "c", "d");

Map也一样

ImmutableMap map = ImmutableMap.of("key1", "value1", "key2", "value2");

有时候要用到双向映射,比如说根据学号查询名字和根据名字查询学号,这时候一般都需要建两个Map分别由学号映射到名字,由名字映射到学号。
但Guava的BiMap完美处理双向映射。

        BiMap idNameMap = HashBiMap.create(); 
        idNameMap.put(1,"xiaohong");
        idNameMap.put(2,"xiaoming");
        idNameMap.put(3,"xiaolan"); 
        System.out.println("idNameMap:"+idNameMap); 
        BiMap nameIdMap = idNameMap.inverse();
        System.out.println("nameIdMap:"+nameIdMap);

当然,在使用BiMap时,会要求Value的唯一性。如果value重复了则会抛出错误:java.lang.IllegalArgumentException。
inverse()会返回一个反转的BiMap,但是注意这个反转的map不是新的map对象,只是与原始map的一种关联,这样你对于反转后的map的所有操作都会影响原始的map对象。

2. 文件操作

为了从文件中读取内容一般操作如下:

File file = new File(getClass().getResource("/aaa.txt").getFile());
BufferedReader reader;
String text = "";
try {
    reader = new BufferedReader(new FileReader(file));
    String line = null;
    while (true) {
        line = reader.readLine();
        if (line == null) {
            break;
        }
        text += line.trim() + "
";
    }
    reader.close();
    reader = null;
} catch (FileNotFoundException e1) {
    e1.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

Guava看了之后说:太长了,看我的:

File file = new File(getClass().getResource("/aaa.txt").getFile());
List lines = null;
try {
  lines = Files.readLines(file, Charsets.UTF_8);
} catch (IOException e) {
  e.printStackTrace();
}

整个世界清静了!

未完待续···

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70350.html

相关文章

  • 有用Guava(二)

    摘要:最基本的区别是会一直保存所有添加的元素,直到显式地移除。相对地,为了限制内存占用,通常都设定为自动回收元素。消息接收方消息发起方同步异步注册事件触发事件处理这个错误可能是由于中对应方法抛出了异常。 缓存 Guava Cache提供了内存缓存功能。内存缓存需要考虑很多问题,包括并发问题,缓存失效机制,内存不够用时缓存释放,缓存的命中率,缓存的移除等等。 当然这些东西Guava都考虑到了。...

    Tonny 评论0 收藏0
  • 集中式内存缓存 Guava Cache

    摘要:缓存总体可分为两种集中式缓存和分布式缓存集中式缓存与分布式缓存的区别其实就在于集中与非集中的概念,其对象可能是服务器内存条硬盘等。内存条版本缓存集中在一台服务器的一条内存条上,为集中式缓存。 背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁。但是由于受限于硬盘IO的性能或者远程...

    Dean 评论0 收藏0
  • 集中式内存缓存 Guava Cache

    摘要:缓存总体可分为两种集中式缓存和分布式缓存集中式缓存与分布式缓存的区别其实就在于集中与非集中的概念,其对象可能是服务器内存条硬盘等。内存条版本缓存集中在一台服务器的一条内存条上,为集中式缓存。 背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁。但是由于受限于硬盘IO的性能或者远程...

    KitorinZero 评论0 收藏0
  • Guava 源码分析(Cache 原理【二阶段】)

    摘要:前言在上文源码分析原理中分析了的相关原理。我在北京模拟执行你在哪儿回复最后执行结果开始提问提问完毕,我去干其他事了收到消息你在哪儿等待响应中。。。。。回复我在北京这样一个模拟的异步事件回调就完成了。 showImg(https://segmentfault.com/img/remote/1460000015643387?w=2048&h=1150); 前言 在上文「Guava 源码分析...

    msup 评论0 收藏0
  • Guava 源码分析(Cache 原理【二阶段】)

    摘要:前言在上文源码分析原理中分析了的相关原理。我在北京模拟执行你在哪儿回复最后执行结果开始提问提问完毕,我去干其他事了收到消息你在哪儿等待响应中。。。。。回复我在北京这样一个模拟的异步事件回调就完成了。 showImg(https://segmentfault.com/img/remote/1460000015643387?w=2048&h=1150); 前言 在上文「Guava 源码分析...

    dack 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<