guava Function

在Java开发中,我们经常需要对一些对象做一些处理,然后返回我们需要看的结果,比如说:对日期进行格式化,获取字符串表示等,当然,我们可以使用String的Formatter来处理(详见:JDK1.5中java.util.Formatter类的学习探究和使用),不过在Guava中我们可以使用Function接口来实现类似的需求,如下:

@Test
public void testFunction() {
    Function<Date, String> function = new Function<Date, String>() {
        @Override
        public String apply(Date input) {
            return new SimpleDateFormat("yyyy-MM-dd").format(input);
        }
    };
    System.out.println(function.apply(new Date()));
}

我们看到,Function接口中的apply方法,接收input参数,返回处理后的结果,我们可以通过调用apply方法,获取想要的结果,其实做过 Android的,会感觉上面的很熟悉,我们在Android开发中,一些事件的处理,编码都类似于上面的风格,这就是所谓的函数式编程。

翻开Function接口的源码,里面只有简单的apply和equals两个方法,我们重点来看apply方法,apply方法接收一个输入对象并返回 一个输出 对象。一个好的Function实现应该没有副作用,也就是说对象作为参数传递方法调用apply方法后应保持不变。

多数情况下,我们都需要自己书写Function接口的实现,以适应工作的需求,不过Guava提供了Functions工具类,其包含了一些常用的Fu nction实现,如forMap和compose

接下来,我们通过实例代码,学习其中的两个重要的方法,forMap和compose方法,如下:

  public static void testFunctions() {
        Map<String, Integer> map = new HashMap<String, Integer>() {
            {
                put("love", 1);
                put("miss", 2);
            }
        };

        Function<String, Integer> function = Functions.forMap(map);  //接收一个Map集合作为参数,返回一个Function,用于执行Map集合的查找

        //调用apply方法,可以通过key获取相应的value
        System.out.println(function.apply("love"));
        //当apply的key值在Map里不存在时,会抛出异常
        //java.lang.IllegalArgumentException: Key ‘like‘ not present in map
//        System.out.println(function.apply("like"));
        //我们可以通过forMap重载的另一个方法避免异常,当Key不存在时,设置一个默认值
        function = Functions.forMap(map, 0);
        System.out.println(function.apply("like"));//can‘t find this key
        /**
         * 有时候,我们需要多个Function进行组合,
         * 这时就需要用到compose,如下:
         */
        //我们有一个Function用于将输入的数字进行平方运算
        Function<Integer, Integer> function1 = new Function<Integer, Integer>() {
            @Override
            public Integer apply(Integer input) {
                return input * input;
            }
        };
        //我们将上面Map中的value值全部进行平方运算
        /**
         * Warning:这里compose方法的参数位置不能颠倒,
         * Function<A, C> compose(Function<B, C> g, Function<A, ? extends B> f)
         * 传入Function<B,C>、Function<A, ? extends B>组合成Function<A, C>
         */
        Function<String, Integer> result = Functions.compose(function1, function);
        System.out.println(result.apply("love"));
        //当Key值不存在时,结果也是大写的
        System.out.println(result.apply("like"));//CAN‘T FIND THIS KEY
    }
时间: 2024-07-29 07:48:19

guava Function的相关文章

通过百度echarts实现数据图表展示功能

现在我们在工作中,在开发中都会或多或少的用到图表统计数据显示给用户.通过图表可以很直观的,直接的将数据呈现出来.这里我就介绍说一下利用百度开源的echarts图表技术实现的具体功能. 1.对于不太理解echarts是个怎样技术的开发者来说,可以到echarts官网进行学习了解,官网有详细的API文档和实例供大家参考学习. 2.以下是我在工作中实现整理出来的实例源码: 公用的支持js文件 echarts.js.echarts.min.js,还有其他的图表需要支持的js文件也可以到官网下载 echa

帮同学做的大一大作业:《我的家乡—郑州》

---恢复内容开始--- 最近在上海上学的一个高中同学让我帮忙,帮她做她们的计算机课程大作业. 由于关系不错我也不好意思拒绝就帮忙做了,因为这个学期刚刚开始接触HTML5和css,所以制作过程中有很多不懂的,而且由于HTML5是选修课,一星期只有一节,所以做这个花费了比较多的时间,这个网站是我制作的第一个网站,比较有纪念意义,所以发在博客上,作为纪念. 通过去做这个作业,我了解到很多课上学不到的东西.因为没有美工,从头到尾,都是我一个人在臆想,刚开始的时候,根本无从下手,我去参考别人做的家乡网站

guava学习--Function、Predicate

Function用于同步转换. Predicate用于过滤. import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.base.Objects

Guava:好用的java类库 学习小记

基础功能 google guava中定义的String操作 在google guava中为字符串操作提供了很大的便利,有老牌的判断字符串是否为空字符串或者为null,用指定字符填充字符串,以及拆分合并字符串,字符串匹配的判断等等. 1. 使用com.google.common.base.Strings类的isNullOrEmpty(input)方法判断字符串是否为空 1 //Strings.isNullOrEmpty(input) demo 2 String input = ""; 3

学习笔记(二) 瓜娃(guava)的API快速熟悉使用

1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava Basic Utilities IO API Cache API 2,为神马选择瓜娃? 瓜娃是java API蛋糕上的冰激凌(精华) 高效设计良好的API. 被google的开发者设计,实现和使用. 遵循高效的java这本书的好的语法实践. 使代码更刻度,简洁,简单. 使用java 1.5的特性, 流行的API,动态的开发 它提供了大量相关的应用

Guava文档翻译之ListenableFuture

ListenableFutureExplained 并发是一个困难的问题,但是使用强大而简单的抽象可以极大地简化并发问题.为了简化事情,Guava使用ListenableFuture继承了JDK的Future接口. 我们强烈建议你在所在代码里总是使用ListenableFuture,而不是Future,因为: 大多数Future相关的接口需要它 这比以后换成ListenableFuture更容易 工具的提供者不需要为它们的方法分别提供Future和ListenableFuture的变体 接口 I

Guava包学习---Maps

Maps包方法列表: 还是泛型创建Map: public static <K, V> HashMap<K, V> newHashMap() { return new HashMap<K, V>(); } public static <K, V> HashMap<K, V> newHashMapWithExpectedSize(int expectedSize) { return new HashMap<K, V>(capacity(e

让开发效率爆表的Guava ---- Maps

本文介绍了Guava集合类Maps的使用, 比如将具有唯一主键的对象快速存入Map等... package com.wenniuwuren.guava; import java.util.List; import java.util.Map; import java.util.NavigableMap; import java.util.Set; import com.google.common.base.Function; import com.google.common.collect.Li

Guava基本用法

一.只读设置 package Guava; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.google.common.collect.ImmutableList; /** * 只读设置 */ public class Demo01 { public static void main(String[] args) { List<String> list = n