b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c multimap 使用 Google Guava 美化你的 Java 代码:1(4)

电脑杂谈  发布时间:2018-02-01 20:07:32  来源:网络整理

Google Collections给我们带来了一对非常优雅的东东,叫做:Functions and Predicates! 和你使用的scala一样有神奇的地方,现在你可以使用在no-functional 的java身上了。你可以在com.google.common.base包里找到这些(更多)。

我们将在下一部分过滤集合的时候谈到Predicates类,首先我们先看一下Function的用法!

Google collections提供了Function接口,实际上,一个function就是从一个对象到另外一个对象的转换变形。

像Lists和Maps这类的Collection工具类给我们提供了转换的方法:

举个例子来说,假设你有一个Map,key是物品,value是对应的价格,单位是欧元。那么,你有个需求是将里面的价格都转换为美元,传统的做法是遍历整个Map,然后更新每个value值,将价格转换为美元价格,好麻烦...

有了Functions,世界一下子变清净了...

好吧,你可能说匿名内部类搞的有点糟,因为 你可能想重用这个function---这里只是演示函数式的一些特点而已。

和这个类似的,我们也可以使用Functions来把一个对象转换成一个完全不同的对象,比如将一个整形转换为字符串。

我们稍后再深入Functions类,首先我们浏览一下Multimap集合以及我们如果使用一点function来转换一个集合。

我在Integrasco做数据工作时遇到的最常见的任务是过滤数据和对大集合进行排序。 简单起见,我们假设你有一个姓名列表想要过滤(看起来有点幼稚):

我们可以使用com.google.common.collect.Iterables和com.google.common.base.Predicates类来过滤例子中的列表,使过滤后的列表中只包含Aleksander或者Jaran:

现在我知道这听起来有点傻帽,但是你仍然可以实现自己的Predicates条件类,比如返回名字长度小于5的列表(我从codemonkeyism.com偷到了下面这个例子):

这个例子返回的是Aleksander,Jaran以及Java(因为Java的长度小于5)。or条件的部分读起来有点绕,但我还可以忍受。equalTo以及or条件都是Predicates自带的方法,用起来很方便。

现在我们来实现一个lengthLessThan的条件,我们只需要这么做:

把这个实现在你的工具类里包装一下就像这样:

关注一下Stephan的博文fluent interfaces for Google Collections --写的相当优雅~!

多亏有了java Collections类,我们可以这么排序:

但有时候我们想做更复杂一些的事情,比如合并多个Comparator或者我们可能只是想要排序过的集合的一个视图,而不改变原来集合的顺序。

Google Collections给我们提供了Ordering,让我们更好地掌控排序。假如我们有两个对Person类排序的comparator,一个是根据lastName排序,一个是根据firstName排序:

那么,假如我们现在想现根据last name排序,再根据first name排序,然后对排序结果反序,那我们需要做的是:

而且,你甚至无需创建Comparator比较器,你可以直接扩展Ordering类!

在这个系列的第一部分,Steve提到了在Scala中,你可以这么做:

功能是说从people这个集合中筛选出firstName为“Steve”的,并且按他们的lastName属性排序。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-64410-4.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 韩圣羽
      韩圣羽

      原料环节不能有蛆吗

    • 潘存实
      潘存实

      啦啦啦啦啦啦啦啦啦啦啦啦啊啦啦啦啦老K

      • 侯君丽
        侯君丽

        门槛在门里的不都这样么

    热点图片
    拼命载入中...