让开发效率爆表的Guava ---- FluentIterable迭代器

Guava提供了可以在Iterator中进行处理的功能更丰富的迭代器, 其实就像是加了一个代理, 增加一些功能。

package com.wenniuwuren.collections;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.Lists;

/**
 *
 * @author wenniuwuren
 *
 */
public class FluentIterableTest {

	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		Person person1 = new Person("lilei", 50);
		Person person2 = new Person("hanmeimei", 40);
		@SuppressWarnings("rawtypes")
		ArrayList personList = Lists.newArrayList(person1, person2);

		//返回一个按条件过滤后的结果集
		Iterable<Person> personFilterByAge = FluentIterable.from(personList)
				  .filter(new Predicate<Person>() {

					@Override
					public boolean apply(Person input) {

						return input.getAge() > 40;
					}

				  });
		Iterator<Person> i = personFilterByAge.iterator();
		while(i.hasNext()) {
			System.out.println("年龄大于40的是:" + i.next().getName());
		}

		System.out.println("-------------我是邪恶的分割线-------------");

		// 返回处理过的结果集
		List<String> transformedPersonList = FluentIterable.from(personList)
				.transform(new Function<Person, String>() {
					@Override
					public String apply(Person input) {
						return Joiner.on(':').join(input.getName(), input.getAge());
					}

				}).toList();
	   Iterator transformedPersonListIterator = transformedPersonList.iterator();
	   while(transformedPersonListIterator.hasNext()) {
		   System.out.println("拼接起来的结果是:" + transformedPersonListIterator.next());
	   }

	 }

}

class Person {
	private String name;
	private int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

参考资料:

《Getting Started with Google Guava》

时间: 2024-08-03 15:21:39

让开发效率爆表的Guava ---- FluentIterable迭代器的相关文章

让开发效率爆表的Guava ---- 基础工具篇

使用现成的库的原因, 既能减少自己开发所带来的bug, 同时又大大提高了开发效率, 当然这也是Java语言流行的一个原因----拥有海量的开源包. 本篇从Guava基础工具入手开始介绍这个广泛使用的库: package com.wenniuwuren.guava; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.HashMap; import com.google.commo

让开发效率爆表的Guava ---- Ordering排序工具

使用Guava的排序工具类, 快速实现对象的单变量排序和多变量排序, 让你的开发效率爆炸... import com.google.common.collect.Lists; import com.google.common.collect.Ordering; import com.google.common.primitives.Ints; import java.util.Collections; import java.util.Comparator; import java.util.I

让开发效率爆表的Guava ---- Table矩阵

使用Guava对矩阵的实现, 做一些矩阵存贮等操作将大大提高效率, 而不是自己用JDK的Array去实现, 可能带来不少bug, 而且增加代码复杂度. package com.wenniuwuren.collections; import java.util.Map; import com.google.common.collect.HashBasedTable; /** * Table: 矩阵的实现 * @author wenniuwuren * */ public class TableTe

让开发效率爆表的Guava ---- Maps

本文介绍了Guava集合类Maps的使用, 比如将具有唯一主键的对象快速存入Map等... package com.wenniuwuren.guava; import java.util.List; import java.util.Map; import java.util.NavigableMap; import java.util.Set; import com.google.common.base.Function; import com.google.common.collect.Li

让开发效率爆表的Guava ---- Lists列表

Guava对JDK  List的扩展, 方便增加list到list中, 方便拆分list package com.wenniuwuren.collections; import java.util.Iterator; import java.util.List; import com.google.common.collect.Lists; public class ListsTest { public static void main(String[] args) { Person perso

让开发效率爆表的Guava ---- Files文件操作

相信很多人最开始用JDK库对文件进行操作时, 都被繁琐重复的代码所恶心到, 当然这也是各种库出现的原因. 接下来介绍Guava的Files类, 提供了对文件操作的极大简化, 如程序员可以完全不用关心流的开关闭. 本文大致介绍了文件的复制.重命名.内容读取等对文件的基本操作. 代码示例: import com.google.common.base.Charsets; import com.google.common.collect.Lists; import com.google.common.h

让开发效率爆表的Guava ---- Concurrent并发

Guava在JDK1.5的基础上, 对并发包进行扩展, 有一些是易用性的扩展(如Monitor), 有一些是功能的完善(如ListenableFuture), 再加上一些函数式编程的特性, 使并发包的灵活性极大的提高... Monitor的使用: import com.google.common.util.concurrent.Monitor; import java.util.ArrayList; import java.util.Iterator; import java.util.List

让开发效率爆表的Guava ---- Sets

本问介绍了Guava中Sets集合类的一般使用情况, 例如集合的互斥. 交集. 并集等... package com.wenniuwuren.collections; import java.util.Iterator; import java.util.Set; import com.google.common.collect.Sets; /** * 对Sets工具类的使用 * @author wenniuwuren * */ public class SetsTest { public st

让开发效率爆表的Guava ---- EventBus事件驱动模型

在软件开发过程中, 难免有信息的共享或者对象间的协作. 如何让对象间信息共享高效, 并且耦合性低, 这是一个难题. 而耦合性高将带来编码修改牵一发而动全身的连锁效应, Spring的风靡正是因为解决了高耦合问题. 本篇介绍的EventBus中也用到了Spring中的依赖注入, 来进行对象和对象间的解耦(如@Subscribe). Guava解决高耦合采用的是事件驱动模型的思路, 对象可以订阅(subscribe)特定的事件或者发布(publish)特定的事件去被消费. 从下面的代码可以看出, E