Guava----Function

2018-03-27 11:29:35 浏览数 (1)

1. Function接口,提供两个方法:

apply方法: 

  可以自定义自己想实现的功能

1 @Nullable T apply(@Nullable F input);

1. 实例:

代码语言:javascript复制
 1 import com.google.common.base.Function;
 2 import com.google.common.base.Joiner;
 3 import org.junit.Test;
 4 import org.slf4j.Logger;
 5 import org.slf4j.LoggerFactory;
 6 
 7 /**
 8  * author: 龚细军
 9  * class-aim:
10  */
11 public class Demo<F, T> {
12 
13     private Logger logger = LoggerFactory.getLogger(Demo.class);
14 
15     public void demoFunction(F input, Function<F, T> function) throws Exception {
16         
17         logger.info(String.valueOf(function.apply(input)));
18     }
19 
20     @Test
21     public void show() {
22 
23         Function<F, T> functionTest = new Function<F, T>() {
24             @Override
25             public T apply(F input) {
26                 return (T) Integer.valueOf(String.valueOf(input));
27             }
28         };
29 
30         try {
31             demoFunction((F) "123", functionTest);
32         } catch (Exception e) {
33             logger.error(Joiner.on("").join("{}show发生异常", e));
34         }
35     }
36 }

一般而言,使用这种方法,可以让我们避免做重复的事情,比如,我们在使用jdbc时,会出现大量重复的代码,我们可以采用Function<F,T>来进行函数编程,简化代码:

代码语言:javascript复制
  2 
  3 
  4 import com.google.common.base.Function;
  5 import com.google.common.collect.Lists;
  6 import com.qunar.fresh.bean.PageVistor;
  7 import com.qunar.fresh.bean.dbBean;
  8 import org.slf4j.Logger;
  9 import org.slf4j.LoggerFactory;
 10 import org.springframework.beans.factory.BeanFactory;
 11 import org.springframework.context.support.FileSystemXmlApplicationContext;
 12 
 13 import java.sql.*;
 14 import java.util.List;
 15 
 16 
 17 /**
 18  * author: 龚细军
 19  * class-aim: dao-dbDemo
 20  */
 21 public class DbUtil<F, T> {
 22 
 23     private static final String CONFIG_PROPERTIES = "classpath:Beans.xml";
 24 
 25 
 26     static Logger logger = LoggerFactory.getLogger(DbUtil.class);
 27 
 28     private Connection connection = null;
 29     private static dbBean dataBean;
 30     private PreparedStatement preparedStatement = null;
 31     private ResultSet resultSet = null;
 32     private List<PageVistor> PageVisitors;
 33 
 34     static {
 35         try {
 36             BeanFactory beanFactory = new FileSystemXmlApplicationContext(CONFIG_PROPERTIES);
 37 
 38             dataBean = (dbBean) beanFactory.getBean("dbBean");
 39             Class.forName(dataBean.getDriver());
 40         } catch (ClassNotFoundException e) {
 41             logger.info(String.format("sql exception0 : %s", e));
 42         }
 43     }
 44 
 45 
 46     private T execute(Function<F, T> function, String sql) {
 47 
 48         T execResult = null;
 49 
 50         try {
 51             connection = DriverManager.getConnection(dataBean.getUrl(),
 52                     dataBean.getUsername(), dataBean.getPassword());
 53             preparedStatement = connection.prepareStatement(sql);
 54             execResult = function.apply(null);
 55         } catch (SQLException e) {
 56             logger.info(String.format("sql exception1 : %s", e));
 57         } finally {
 58             try {
 59                 if (!preparedStatement.isClosed())
 60                     preparedStatement.close();
 61                 if (!connection.isClosed())
 62                     connection.close();
 63             } catch (SQLException e) {
 64                 logger.info(String.format("sql exception2 : %s", e));
 65             }
 66         }
 67 
 68         return execResult;
 69     }
 70 
 71 
 72     public List<PageVistor> Query(String sql) {
 73 
 74 
 75         PageVisitors = Lists.newArrayList();
 76 
 77         Function<F, T> function = new Function<F, T>() {
 78 
 79             @Override
 80             public T apply(F input) {
 81 
 82 
 83                 try {
 84                     resultSet = preparedStatement.executeQuery();
 85 
 86                     while (resultSet.next()) {
 87                         PageVisitors.add(new PageVistor(0, "", resultSet.getString(1)
 88                                 , resultSet.getInt(2)));
 89                     }
 90                 } catch (SQLException e) {
 91                     logger.info(String.format("sql exception3 : %s", e));
 92                 } finally {
 93                     try {
 94 
 95                         if (resultSet != null) resultSet.close();
 96 
 97                     } catch (SQLException e) {
 98                         logger.info(String.format("sql exception4 : %s", e));
 99                     }
100                 }
101 
102                 return null;
103             }
104         };
105         this.execute(function, sql);
106 
107         return PageVisitors;
108     }
109 
110 
111     public void Update(String sql) {
112 
113         Function<F, T> function = new Function<F, T>() {
114 
115             @Override
116             public T apply(F input) {
117 
118                 try {
119                     int var = preparedStatement.executeUpdate();
120                     if (var == 0)
121                         logger.error("{} 更新数据失败");
122                 } catch (SQLException e) {
123                     logger.info(String.format("sql exception3 : %s", e));
124                 }
125                 return null;
126             }
127         };
128 
129         this.execute(function, sql);
130     }
131 }

0 人点赞