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 ...
随机推荐
- C# ASP.NET 读取EXCEL 单元格 读取 空值 不显示
跟大家分享一下,[摘自]:http://blog.csdn.net/li185416672/article/details/8213729 读取excel时,某些单元格为空值 原来如此: 当我们用ol ...
- TRUNCATE TABLE (Transact-SQL)
删除表中的所有行,而不记录单个行删除操作. TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似:但是,TRUNCATE TABLE 速度更快,使用的系统资源和事务日志资源 ...
- window 下 xampp 上 安装memcached
1.下载memcache 的window 稳定版,解压到xampp 目下;比如D:\xampp\memcached 2. 打开cmd 命令界面 输入 D:\xampp\memcached\ memca ...
- 微信小程序实例
看到小程序,那么火,自己也想动手写一个.但是没有很好的api接口.有一天看到一个开发安卓的朋友,写了一个干货集中营的小程序.就搜了一下.看到api是免费开放的.于是自己也动手写了一个. 具体的微信小程 ...
- 补发SQL。(实用语句!!)
设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表 ...
- apache开启.htaccess及.htaccess的使用方法(转)
apache开启.htaccess及.htaccess的使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-12-02 今天本地调试PHP程序,用到了.htaccess,而默认配置里面 ...
- Java-坦克大战
利用Java语言中的集合.Swing.线程等知识点编写一个坦克大战游戏.(1) 画出敌我坦克的原理:在坦克类里面有一个布尔类型变量good.用于判断坦克的阵营,在创建坦克对象时在Tank类的构造方法中 ...
- Java开发中经典的小实例-(冒泡法)
public class Test25 { public static void main(String[] args) { // 冒泡法 int[] array = ...
- TensorFlow支持windows了
(留坑)找个时间测试一下. 终于来了,TensorFlow 新增官方 Windows 支持
- solr 3.5.0 与 tomcat 7.0.5 整合配置
1.将D:\software\lucene-3.6.0\apache-solr-3.5.0\example\solr下的文件拷贝到要作为服务器的位置(如:D:\lucene\solr\home),可以 ...