public class FluentIterableTest {

public static void main(String[] args) {

Man man1 = new Man("Jack Miller", 18);

Man man11 = new Man("Jack Miller", 18);

Man man2 = new Man("Roy Miller", 18);

Man man3 = new Man("Lily Miller", 11);

Man man4 = new Man("Rose Miller", 5);

Man man5 = new Man("Mike Chen", 34);

List<Man> manList = ImmutableList.of(man1, man11, man2, man3, man4, man5);

Set<Man> mans =  FluentIterable.from(manList).toSet();

System.out.println(mans.size());

//转换

List<String> transformed = FluentIterable.from(manList).transform(new Function<Man, String>() {

@Override

public String apply(Man input) {

return Joiner.on('#').join(input.getName(), input.getAge());

}

}).toList();

System.out.println(transformed);

// 组合Predicate条件

Predicate<Man> predicate = Predicates.alwaysTrue();

predicate = Predicates.and(predicate, new NamePredicate("Chen"));

predicate = Predicates.and(predicate, new AgePredicate(15));

// 使用FluentIterable过滤元素,返回一个Iterable[]

Iterable<Man> manIterable = FluentIterable.from(manList).filter(predicate).limit(3)

.transform(new Function<Man, Man>() {

@Override

public Man apply(Man man) {

man.setAge(man.getAge() * 2);

return man;

}

});

System.out.println(manIterable);

}

}

class Man {

private String name;

private int age;

public Man(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public int getAge() {

return age;

}

public void setName(String name) {

this.name = name;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return name + " is " + age + " years old";

}

}

class AgePredicate implements Predicate<Man> {

private int minAge;

public AgePredicate(int minAge) {

this.minAge = minAge;

}

@Override

public boolean apply(Man man) {

if (man.getAge() < minAge)

return false;

return true;

}

}

class NamePredicate implements Predicate<Man> {

private String illegalName;

public NamePredicate(String illegalName) {

this.illegalName = illegalName;

}

@Override

public boolean apply(Man man) {

if (man.getName().contains(illegalName))

return false;

return true;

}

}

guava学习--FluentIterable的更多相关文章

  1. Guava学习笔记目录

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

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

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

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

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

  4. Guava学习

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

  5. [置顶] Guava学习之ArrayListMultimap

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

  6. [置顶] Guava学习之Splitter

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

  7. [置顶] Guava学习之Iterators

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

  8. [置顶] Guava学习之Lists

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

  9. [置顶] Guava学习之Immutable集合

    Immutable中文意思就是不可变.那为什么需要构建一个不可变的对象?原因有以下几点: 在并发程序中,使用Immutable既保证线程安全性,也大大增强了并发时的效率(跟并发锁方式相比).尤其当一个 ...

随机推荐

  1. jq html 页面点击图片直接上传

    <form id="ff" method="post" enctype="multipart/form-data" style=&qu ...

  2. SpringMvc自定义拦截器

    SpringMvc也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义拦截器必须实现HandlerInterceptor接口 -preHandle():这个方法在业务处理器 ...

  3. retain,copy,assign及autorelease ,strong,weak

    一,retain, copy, assign区别 1. 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a ...

  4. How to run a (Tomcat)Java application server on a Azure virtual machine

    http://www.windowsazure.com/en-us/documentation/articles/virtual-machines-java-run-tomcat-applicatio ...

  5. 【数论】Miller_Rabin

    Miller_Rabin素数测试     Miller_Rabin判断单个素数的方法运用了费马小定理,可以说非常之快了.     Miller_Rabin曾经被称作“黑科技”,但是根据费马小定理其实完 ...

  6. C# 参数化SQL语句中的like和in

    在写项目的时候遇到一个问题,sql 语句进行 like in 参数化,按照正常的方式是无法实现的我们一般的思维是: Like 参数:string strSql = "select * fro ...

  7. SpringMVC访问静态资源的三种方式(转)

    本文转自:http://www.iigrowing.cn/springmvc_fang_wen_jing_tai_zi_yuan_de_san_zhong_fang_shi.html 如何你的Disp ...

  8. python核心编程学习记录之映射和集合类型

    字典是python里唯一的映射类型

  9. TextView,EditText中添加不同颜色的文字

    在很多时候,在我们项目里需要用到在一个TextView中要显示不同颜色的文字 private Spanned colorText(String text) { return Html.fromHtml ...

  10. Python—I/O多路复用

    一.I/O多路复用概念: 监听多个描述符的状态,如果描述符状态改变,则会被内核修改标志位,从而被进程获取进而进行读写操作 二.select,poll,epoll select模块,提供了:select ...