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. PHP5与MySQL数据库操作

    1 建立数据库表:  2 读取数据 2.1 建立01.php 2.2 建立member.php  3 修改数据 3.1 建立level.php(修改数据) 3.2 建立up_level.php  4 ...

  2. submit

    前台<body>中的代码: <body> <div id="top"> </div> <form id="login ...

  3. Boadload和Image$$??$$Limit含义

    Bootloader 即引导加载程序,是系统加电后运行的第一段软件代码.简单的说它们都是bootloader,所完成的任务也大同小异. 熟悉x86体系结构的朋友肯定知道,x86平台上bootloade ...

  4. Dynamics AX 2012 R2 报表部署权限错误

    今天,Reinhard在 Deploy AX Reporting时,发生权限错误. 配置 ID: HOSTMSSQLSERVER 描述: HOST@MSSQLSERVER 默认值: True 报表服务 ...

  5. WPF:设置MenuItem多种不同状态图标

    需求描述: 给MenuItem内部的子Image设置默认图标(鼠标leave).鼠标hover图标.和选中时的图标. 注:是给Menu内个别MenuItem修改,并且是弹出子菜单. 问题描述: 1)前 ...

  6. 对于JQuery的一些见解

    jQuery是什么?(了解)  www.github.com jQuery 其实就是一堆的js函数,是普通的js,只不过应用广泛,形成了行业标准. 参考书:锋利的jQuery 学习参考:http:// ...

  7. 实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty 和Staff。

    (1)Person类中的属性有:姓名name(String类型),地址address(String类型), 电话号码telphone(String类型)和电子邮件地址email(String类型): ...

  8. 异步加载JS的4种方式(详解)

    方案1:$(document).ready <!DOCTYPE html> <html> <head> <script src="http://co ...

  9. Cable TV Network-POJ1966图的连通度

    Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4404 Accepted: 2047 Desc ...

  10. 【转】malloc与free的底层实现

    本文转自:http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201210975312473/ 如何查看进程发生缺页中断的次数? 用ps ...