Guava collections -- FluentIterable
发布日期:2021-06-29 12:51:53
浏览次数:3
分类:技术文章
本文共 3833 字,大约阅读时间需要 12 分钟。
Guava全文介绍地址:Google Guava
这次主要介绍是的是com.google.common.collect.FluentIterable.做为Java Iterable API的扩展,通过不同方式来提供功能类似于Java 8强大的”Streams” 库(in java.util.stream)。 关键的不同点有: 1. 一个stream通常是一次消费的。当一次任何”终端操作”(findFirst()或iterator())被调用时,它会变得无效。尽管流实现并包含所有Iterable接口的方法,实际上它并没有真正这样做。所以为了避免上面的情况,我们需要避免repeat-iterability。 2. FluentIterable并没有提供Stream中许多功能,包括最小/最大,层次分明,减少,排序,非常强大的收集,内置支持并行流操作。 3. FluentIterable提供了一些”Stream”中并不包含的特性。 4. Streams提供了IntStream的变体,强烈推荐使用。 5. Streams是标准的Java库,不需要依赖第三方库(但是不兼容Java 7以及以前版本) 下面就介绍一下它的典型用法:1、准备工作
1.基本类
@Data@EqualsAndHashCodepublic class Person { private String firstName; private String lastName; private int age; private String sex;}
2.准备基础数据
public class FluentIterablesTest { private Person person1; private Person person2; private Person person3; private Person person4; private Person person5; private Person person6; CollectionpersonList; @Before public void setUp() { person1 = new Person("Wilma", "Flintstone", 30, "F"); person2 = new Person("Fred", "Flintstone", 32, "M"); person3 = new Person("Betty", "Rubble", 31, "F"); person4 = new Person("Barney", "Rubble", 33, "M"); person5 = new Person("Barney", "Rubble", 33, "M"); person6 = new Person("Barney", "Rubble", 33, "M"); personList = Lists.newArrayList(person1, person2, person3, person4, person5, person6); }}
1、过滤功能
@Test public void testFilter() throws Exception { IterablepersonsFilteredByAge = FluentIterable.from(personList).filter(new Predicate () { @Override public boolean apply(Person input) { return input.getAge() > 31; } }); assertThat(Iterables.contains(personsFilteredByAge, person2), is(true)); assertThat(Iterables.contains(personsFilteredByAge, person4), is(true)); assertThat(Iterables.contains(personsFilteredByAge, person5), is(true)); assertThat(Iterables.contains(personsFilteredByAge, person6), is(true)); assertThat(Iterables.contains(personsFilteredByAge, person1), is(false)); assertThat(Iterables.contains(personsFilteredByAge, person3), is(false)); }
2、其中一个满足条件
@Test public void testAnyMatch() throws Exception { PredicatepersonOlderThan31Predicate = new Predicate () { @Override public boolean apply(Person input) { return input.getAge() > 31; } }; assertThat(FluentIterable.from(personList).anyMatch(personOlderThan31Predicate),is(true)); }
3、全部满足条件
@Test public void testAllMatch() throws Exception { PredicatepersonOlderThan25Predicate = new Predicate () { @Override public boolean apply(Person input) { return input.getAge() > 25; } }; assertThat(FluentIterable.from(personList).allMatch(personOlderThan25Predicate),is(true)); }
4、对包含对象转换
@Test public void testTransform() throws Exception { Listtransformed = FluentIterable.from(personList).transform(new Function () { @Override public String apply(Person input) { return Joiner.on('#').join(input.getLastName(), input.getFirstName(), input.getAge()); } }).toList(); assertThat(transformed.get(1), is("Flintstone#Fred#32")); }
5、过滤相同的对象
观察足够仔细的小伙伴了,可能有点疑惑。为什么person4,person5,person6这3个对象是相等的呢?没有错,就是为了演示这个对象过滤相同对象这个功能。
@Test public void testFilterEqualObject() throws Exception { assertTrue(personList.size() == 6); Setpersons = FluentIterable.from(personList).toSet(); assertTrue(persons.size() == 4); }
这个方法注意,包含的集合不能为空,否则为报NullPointException
.
转载地址:https://carlzone.blog.csdn.net/article/details/51847796 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月05日 02时27分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP+JavaScript实现图片预览上传功能开发!
2019-04-29
JSONView - Chrome插件安装详解!(谷歌浏览器插件)!
2019-04-29
上传图片到阿里云OSS和获取上传图片的url的详解 !
2019-04-29
webstorm 和 phpstorm 有什么区别呢?做 WEB 开发用哪个好?
2019-04-29
常见位运算
2019-04-29
武大学生用python敲出樱花开放 | 附源码
2019-04-29
【中文教程】简单粗暴入门TensorFlow 2.0 | 北大学霸出品
2019-04-29
经典面试题:如何保证缓存与数据库的双写一致性?
2019-04-29
一份来自亚马逊工程师的Google面试指南,GitHub收获9.8万星,已翻译成中文
2019-04-29
硬货 | Redis 性能问题分析
2019-04-29
Kafka为什么这么快?
2019-04-29
灵魂四连问:API 接口应该如何设计?如何保证安全?如何签名?如何防重?
2019-04-29
一个依赖搞定 Spring Boot 反爬虫,防止接口盗刷!
2019-04-29
酸爽!IDEA 中这么玩 MyBatis,让编码速度飞起!
2019-04-29
已拿 Offer!字节跳动面试经验分享
2019-04-29
Windows路由表透析
2019-04-29
Java LockSupport 实战
2019-04-29
线程面试题实战与分析——各种锁的灵活运用
2019-04-29
Java 生产者和消费者面试题
2019-04-29
生产者消费者问题
2019-04-29