guava(4)函数式编程
来源:互联网 发布:功夫英语 知乎 编辑:程序博客网 时间:2024/05/01 15:01
函数式编程:
转载自:http://my.oschina.net/indestiny/blog/215041
使用Function接口(jdk8中已经存在):
1
/**
2
* 其功能就是将输入类型转换为输出类型
3
*/
4
public
interface
Function<F, T> {
5
T apply(
@Nullable
F input);
6
}
01
/**
02
* 日期转换
03
*/
04
public
class
DateFormatFunction
implements
Function<Date, String> {
05
@Override
06
public
String apply(Date input) {
07
SimpleDateFormat dateFormat =
new
SimpleDateFormat(
"dd/mm/yyyy"
);
08
return
dateFormat.format(input);
09
}
10
}
使用Functions类:
- Functions.forMap()方法:
1
/**
2
* 州类
3
*/
4
public
class
State {
5
private
String name;
6
private
String code;
7
private
Set<City> mainCities =
new
HashSet<City>();
8
}
1
Map<String, State> states =
new
HashMap<String, State>();
2
Function<String, State> lookup = Functions.forMap(states);
3
System.out.println(lookup.apply(key));
//key不存在会抛异常
4
5
//你也可以给不存在的key指定一个默认值
6
Function<String, State> lookup = Functions.forMap(states,
null
);
- Functions.compose()方法
01
/**城市类**/
02
public
class
City {
03
private
String name;
04
private
String zipCode;
05
private
int
population;
06
07
@Override
08
public
String toString() {
09
return
name;
10
}
11
}
1
/**
2
* 将州的城市转换为字符串
3
*/
4
public
class
StateToCityString
implements
Function<State, String> {
5
@Override
6
public
String apply(State input) {
7
return
Joiner.on(
","
).join(input.getMainCities());
8
}
9
}
你可以通过组合Function,查找某州的城市列表
1
Function<String, State> lookup = Functions.forMap(states);
2
Function<State, String> stateFunction =
new
StateToCityString();
//州到城市的转换
3
Function<String, String> stateCitiesFunction = Functions.compose(stateFunction, lookup);
//组合Function
4
System.out.println(stateCitiesFunction.apply(key));
1
stateFunction.apply(lookup.apply(key));
使用Predicate接口(jdk8中已存在):
- Predicate接口
1
public
interface
Predicate<T> {
2
boolean
apply(T input);
//不同于Function.apply, 该apply用于过滤对象
3
}
1
/**
2
* 过滤人口小于500000的城市
3
*/
4
public
class
PopulationPredicate
implements
Predicate<City> {
5
@Override
6
public
boolean
apply(City input) {
7
return
input.getPopulation() <=
500000
;
8
}
9
}
使用Predicates类:
有两个过滤条件:
01
/**
02
* 选择气候为TEMPERATE的城市
03
*/
04
public
class
TemperateClimatePredicate
implements
Predicate<City> {
05
@Override
06
public
boolean
apply(City input) {
07
return
input.getClimate().equals(Climate.TEMPERATE);
08
}
09
}
10
11
/**
12
* 选择雨量小于45.7的城市
13
*/
14
public
class
LowRainfallPredicate
implements
Predicate<City> {
15
@Override
16
public
boolean
apply(City input) {
17
return
input.getAverageRainfall() <
45.7
;
18
}
19
}
你可以运用下面的方法实现过滤组合等:
1
Predicates.and(smallPopulationPredicate,lowRainFallPredicate);
//且
2
Predicates.or(smallPopulationPredicate,temperateClimatePredicate);
//或
3
Predicate.not(smallPopulationPredicate);
//非
4
Predicates.compose(smallPopulationPredicate,lookup);
//组合转换再过滤
使用Supplier接口:
- Supplier接口
1
public
interface
Supplier<T> {
2
T get();
//用于创建对象
3
}
使用Suppliers类:
- Suppliers.memorize()方法:
1
SupplyCity sc =
new
SupplyCity();
2
System.out.println(Suppliers.memoize(sc).get());
3
System.out.println(Suppliers.memoize(sc).get());
//返回同一对象, 单例
- Suppliers.memorizeWithExpiration()方法:
01
SupplyCity sc =
new
SupplyCity();
//超时再新建对象, 类似缓存
02
Supplier<City> supplier = Suppliers.memoizeWithExpiration(sc,
5
, TimeUnit.SECONDS);
03
City c = supplier.get();
04
System.out.println(c);
05
Thread.sleep(
3000
);
06
c = supplier.get();
07
System.out.println(c);
//与之前相等
08
Thread.sleep(
2000
);
09
c = supplier.get();
10
System.out.println(c);
//与之前不等
不吝指正。
0 0
- guava(4)函数式编程
- [Google Guava] 4-函数式编程
- java guava 函数式编程
- guava function and predicate 函数式编程
- Java Guava中的函数式编程讲解
- 使用Guava进行函数式编程
- Java经典类库-Guava中的函数式编程讲解
- Java经典类库-Guava中的函数式编程讲解
- Java经典类库-Guava中的函数式编程讲解
- guava之只读、函数式编程(过滤、转换)
- Google Guava - FunctionalExplained(Guava函数式风格说明)
- Guava 教程(3):Java 的函数式编程,通过 Google Collections 过滤和调用
- guava之只读、函数式编程(过滤 转换 约束)、集合与apacheJAVA134-135
- guava之只读、函数式编程(过滤、转换、组合 )、约束和集合
- JAVA学习笔记46——其他容器简介3:guava只读控制+函数式编程+集合操作
- Guava改进编程点
- Guava谓词函数
- Guava类库学习--只读设置+函数编程+约束条件+集合操作
- [Polygon]谷歌墨卡托坐标系图形转化为WGS84地理坐标系图形
- 成功必读本:培养人脉的106个技巧
- 【js设计模式笔记---工厂模式】
- android不支持的c库与改进方法
- 微信营销如何提升转化率与购买率
- guava(4)函数式编程
- Linux shell 变量 数学 运算
- 【Cocoa and Object-c : Up and Running 笔记】05 Object-C 高级语法
- struts2中的拦截器
- linux下卸载mysql
- 数据挖掘中的分类和聚类的区别
- DeCAF: A deep convolutional activation feature for generic visual recognition
- 程序猿必须知道的算法(第一弹)回溯法
- IOS系统架构