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的更多相关文章

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

    guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...

  2. Function, Predicate

    Function, Predicate的使用 Function用于把一种类型的对象转化为另一种类型的对象.Predicate用于判断某个对象是否符合一定条件. 一.Function和Functions ...

  3. [置顶] Guava学习之Lists

    Lists类主要提供了对List类的子类构造以及操作的静态方法.在Lists类中支持构造ArrayList.LinkedList以及newCopyOnWriteArrayList对象的方法.其中提供了 ...

  4. Guava学习笔记目录

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...

  5. guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁

    guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁 1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code- ...

  6. Guava学习

    Guava学习笔记目录 Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concu ...

  7. [置顶] Guava学习之ArrayListMultimap

    ArrayListMultimap类的继承关系如下图所示: Guava ArrayListMultimap List Multimap 是一个接口,继承自 Multimap 接口.ListMultim ...

  8. [置顶] Guava学习之Splitter

    Splitter:在Guava官方的解释为:Extracts non-overlapping substrings from an input string, typically by recogni ...

  9. [置顶] Guava学习之Iterators

    Iterators类提供了返回Iterator类型的对象或者对Iterator类型对象操作的方法.除了特别的说明,Iterators类中所有的方法都在Iterables类中有相应的基于Iterable ...

随机推荐

  1. C语言-自定义函数

    C语言自定义函数 --1-- 自定义函数定义 1.1 无参无返回值函数 1.2 无参有返回值函数 1.3 有参无返回值函数 1.4 有参有返回值函数 --2-- 函数的参数 2.1 形式参数介绍和使用 ...

  2. [课程设计]Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案)

    Scrum 3.7 多鱼点餐系统开发进度(留言板选择方案) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统W ...

  3. 山东省第七届ACM省赛------Memory Leak

    Memory Leak Time Limit: 2000MS Memory limit: 131072K 题目描述 Memory Leak is a well-known kind of bug in ...

  4. 我的Android第二章

    前言 之前有很多人遇到了关于内部类的问题[主要在android的学习之中会大量的使用到],内部类是什么,内部类怎么定义,内部类的分类,内部类的好处,内部类如何访问,这里我们来结合代码简单的理解一下 1 ...

  5. 洛谷 P1007 独木桥

    #include<set> #include<map> #include<cmath> #include<queue> #include<cstd ...

  6. HTMl链接- target/ name

    下面解释一下链接标签的另外两个属性:target和name HTML 链接 - target 属性 使用 Target 属性,你可以定义被链接的文档在何处显示. 下面的这行会在新窗口打开文档: < ...

  7. 微信小程序-视图条件渲染

    条件渲染 wx:if 在框架中,我们用 wx:if="{{condition}}" 来判断是否需要渲染该代码块: <view wx:if="{{condition} ...

  8. avalon学习笔记

    背景: 刚刚到一家新的公司,我新接手的项目采用的mvvm框架是avalon,当然我以前没有学过angular,但是用过react,所以对于这类框架应该不算陌生.但毕竟是一个新的框架,所以还是先学起来, ...

  9. 转!! PreparedStatement是如何防止SQL注入的

    SQL注入最简单也是最常见的例子就是用户登陆这一模块,如果用户对SQL有一定的了解,同时系统并没有做防止SQL注入处理,用户可以在输入的时候加上'两个冒号作为特殊字符,这样的话会让计算机认为他输入的是 ...

  10. RANSAC 剔除错误匹配 估计模型

    随机抽样一致,这个算法,我以前一直都没有理解透彻.只知道可以用来直线拟合,网上大多数中文博客也都是写直线拟合的,但是用来匹配二维特征的时候,总还是没弄明白. 基本概念参考 http://www.cnb ...