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;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Iterators;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public class User {
private String username;
private String sex;
public User(String username, String sex) {
this.username = username;
this.sex = sex;
}
void setUsername(String username) {
this.username = username;
}
void setSex(String sex) {
this.sex = sex;
}
String getUsername() {
return username;
}
String getSex() {
return sex;
}
@Override
public String toString() {
return Objects.toStringHelper(this).omitNullValues().add("username", username).add("sex", sex).toString();
}
public static void main(String[] args) {
User u1 = new User("malone", "man");
User u2 = new User("lanlan", "woman");
List<User> list = Lists.newArrayList(u1, u2);
// Function 这里用于类型转换
Collection<String> result = Collections2.transform(list, new Function<User, String>() {
@Override
public String apply(User user) {
if (Objects.equal(user, null)) {
return "";
}
return user.toString();
}
});
for (String ss : result) {
System.out.println(ss);
}
// Predicate 这里是用于过滤
Collection<User> resultUser = Collections2.filter(list, new Predicate<User>() {
@Override
public boolean apply(User user) {
if (Objects.equal(user, null)) {
return false;
}
if (Objects.equal(user.getSex(), "woman")) {
return false;
}
return true;
}
});
for (User ss : resultUser) {
System.out.println(ss);
}
Function<User, String> f1 = new Function<User, String>() {
@Override
public String apply(User user) {
if (Objects.equal(user, null)) {
return "";
}
return user.getUsername();
}
};
// 多个工具类均可使用类函数式编程
Collection<String> result1 = Collections2.transform(list, f1);
for (String ss : result1) {
System.out.println("1:" + ss);
}
List<String> strList = Lists.transform(list, f1);
for (String ss : strList) {
System.out.println("2:" + ss);
}
Iterator<String> it = Iterators.transform(list.iterator(), f1);
while (it.hasNext()) {
System.out.println("3:" + it.next());
}
Function<String, String> f2 = new Function<String, String>() {
@Override
public String apply(String input) {
if (Objects.equal(input, "malone")) {
return "malone's function";
} else {
return "lanlan's function";
}
}
};
// 连接多个Function
// 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<User, String> f3 = Functions.compose(f2, f1);
List<String> mylist = Lists.transform(list, f3);
System.out.println(mylist.get(0));
Map<String, String> map = Maps.newHashMap();
map.put("1", "2");
// Functions可以转换一下map,使用语义更直白的代码,并提供默认值支持
Function<String, String> lookup = Functions.forMap(map, "default value");
System.out.println(lookup.apply("1"));
}
}
Predicates:
Map<String, Girl> map = new HashMap<String, Girl>() {
{
put("love the age", new Girl(18, "not so nice"));
put("love the face", new Girl(16, "so nice"));
}
};
Function<String, Girl> function = Functions.forMap(map);
Predicate<Girl> predicate = new Predicate<Girl>() {
@Override
public boolean apply(Girl input) {
return input.getAge() >= 18;
}
};
Predicate<String> result = Predicates.compose(predicate, function);
return result;
guava学习--Function、Predicate的更多相关文章
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...
- Function, Predicate
Function, Predicate的使用 Function用于把一种类型的对象转化为另一种类型的对象.Predicate用于判断某个对象是否符合一定条件. 一.Function和Functions ...
- [置顶] Guava学习之Lists
Lists类主要提供了对List类的子类构造以及操作的静态方法.在Lists类中支持构造ArrayList.LinkedList以及newCopyOnWriteArrayList对象的方法.其中提供了 ...
- Guava学习笔记目录
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...
- guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁
guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁 1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code- ...
- Guava学习
Guava学习笔记目录 Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concu ...
- [置顶] Guava学习之ArrayListMultimap
ArrayListMultimap类的继承关系如下图所示: Guava ArrayListMultimap List Multimap 是一个接口,继承自 Multimap 接口.ListMultim ...
- [置顶] Guava学习之Splitter
Splitter:在Guava官方的解释为:Extracts non-overlapping substrings from an input string, typically by recogni ...
- [置顶] Guava学习之Iterators
Iterators类提供了返回Iterator类型的对象或者对Iterator类型对象操作的方法.除了特别的说明,Iterators类中所有的方法都在Iterables类中有相应的基于Iterable ...
随机推荐
- 财务报表 > 现金流表的直接法,间接法,Cash Flow from Operating Activites
经营活动现金流量 Cash Flow from Operating Activites 是指企业投资活动和筹资活动以外的所有的交易和事项产生的现金流量.它是企业现金的主要来源. 1. 直接法经营活动现 ...
- easyui-window 关闭事件,只要关闭窗口就会触发
$(function () { $('#windowsMSG').window({ onBeforeClose: function () { //当 ...
- SVN服务器搭建和使用(三)
SVN服务器搭建和使用(三) 接下来,试试用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突等. 添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文 ...
- C#序列化及反序列化Json对象通用类JsonHelper
当今的程序界Json大行其道.因为Json对象具有简短高效等优势,广受广大C#码农喜爱.这里发一个序列化及反序列化Json对象通用类库,希望对大家有用. public class JsonHelper ...
- centos7 安装php7+mysql5.7+nginx+redis
.1.先修改yum源 https://webtatic.com rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest- ...
- 微信小程序-提示框
提示框: wx.showToast(OBJECT) 显示消息提示框 OBJECT参数说明: 示例代码: wx.showToast({ title: '成功', icon: 'success', dur ...
- 远程执行shellcode
#include "Windows.h" #include <WinSock2.h> #include <stdio.h> #pragma comment( ...
- CodeUI Test:创建第一个CodeUI Test
CodeUI Test是微软自动化测试的一个比较好的项目,它的原理是获取到Windows窗口上的控件,然后针对控件的部分属性进行获取和对比,模拟对控件进行点击.双击.右键点击等事件.这样可以录制用户测 ...
- LaTeX用dvi编译,Yap浏览器弹出对话框,决解办法(傻瓜教程)
1,打开windows-----所有运用,找到CTEX的文件目录 2,打开Previewer对话框 打开后如图: 2,选择view – option 打开后如下图: 3,选择Display---- ...
- PL/SQL通过免安装客户端连接远端ORACLE数据库
参考百度经验:http://jingyan.baidu.com/article/375c8e19b4094d25f2a2291a.html