- 浏览: 7952705 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
在guava库中,自带了过滤器(filter)的功能,可以用来对collection 进行过滤,先看例子:
在这个例子中,给出一个list,过滤出含有字母a的元素
此外,可以使用Collections2.filter() 去进行过滤
这里注意的是,Collections2.filter中,当在上面的result中增加了元素后,会直接影响原来的names这个list的,就是names中的集合元素是5了。
再来看下predicates判断语言,
com.google.common.base. Predicate : 根据输入值得到 true 或者 false
拿Collections2中有2个函数式编程的接口:filter , transform ,例如 :在Collection<Integer>中过滤大于某数的内容:
把Lis<Integer>中的Integer类型转换为String , 并添加test作为后缀字符:
需要说明的是每次调用返回都是新的对象,同时操作过程不是线程安全的。
再来点例子:
将多个prdicate进行组合
上面的例子中找出包含J字母或不包含a的元素;
再看下如何将集合中的空元素删除:
检查一个collection中的所有元素是否符合某个条件:
下面看如何把一个list进行转换,
再看结合transform和predicates结合使用的例子:
在这个例子中,将一个LIST中的每一个元素进行使用Predicates.containsPattern,判断是否包含m,返回的是boolean,然后再得到的boolean值一起转换为collection
下面是两个function一起结合使用的例子:
在这个例子中,首先应用函数f1,求出每个元素的长度,然后再根据f1函数,分别返回
它们的boolean值,再转换为collection.
最后看下将filter和transform结合使用的例子:
@Test public void whenFilterWithIterables_thenFiltered() { List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Iterable<String> result = Iterables.filter(names, Predicates.containsPattern("a")); assertThat(result, containsInAnyOrder("Jane", "Adam")); }
在这个例子中,给出一个list,过滤出含有字母a的元素
此外,可以使用Collections2.filter() 去进行过滤
@Test public void whenFilterWithCollections2_thenFiltered() { List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Collection<String> result = Collections2.filter(names, Predicates.containsPattern("a")); assertEquals(2, result.size()); assertThat(result, containsInAnyOrder("Jane", "Adam")); result.add("anna"); assertEquals(5, names.size()); }
这里注意的是,Collections2.filter中,当在上面的result中增加了元素后,会直接影响原来的names这个list的,就是names中的集合元素是5了。
再来看下predicates判断语言,
com.google.common.base. Predicate : 根据输入值得到 true 或者 false
拿Collections2中有2个函数式编程的接口:filter , transform ,例如 :在Collection<Integer>中过滤大于某数的内容:
Collection<Integer> filterList = Collections2.filter(collections , new Predicate<Integer>(){ @Override public boolean apply(Integer input) { if(input > 4) return false; else return true; } });
把Lis<Integer>中的Integer类型转换为String , 并添加test作为后缀字符:
List<String> c2 = Lists.transform(list, new Function<Integer , String>(){ @Override public String apply(Integer input) { return String.valueOf(input) + "test"; } });
需要说明的是每次调用返回都是新的对象,同时操作过程不是线程安全的。
再来点例子:
@Test public void whenFilterCollectionWithCustomPredicate_thenFiltered() { Predicate<String> predicate = new Predicate<String>() { @Override public boolean apply(String input) { return input.startsWith("A") || input.startsWith("J"); } }; List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Collection<String> result = Collections2.filter(names, predicate); assertEquals(3, result.size()); assertThat(result, containsInAnyOrder("John", "Jane", "Adam")); }
将多个prdicate进行组合
@Test public void whenFilterUsingMultiplePredicates_thenFiltered() { List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Collection<String> result = Collections2.filter(names, Predicates.or(Predicates.containsPattern("J"), Predicates.not(Predicates.containsPattern("a")))); assertEquals(3, result.size()); assertThat(result, containsInAnyOrder("John", "Jane", "Tom")); }
上面的例子中找出包含J字母或不包含a的元素;
再看下如何将集合中的空元素删除:
@Test public void whenRemoveNullFromCollection_thenRemoved() { List<String> names = Lists.newArrayList("John", null, "Jane", null, "Adam", "Tom"); Collection<String> result = Collections2.filter(names, Predicates.notNull()); assertEquals(4, result.size()); assertThat(result, containsInAnyOrder("John", "Jane", "Adam", "Tom")); }
检查一个collection中的所有元素是否符合某个条件:
@Test public void whenCheckingIfAllElementsMatchACondition_thenCorrect() { List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); boolean result = Iterables.all(names, Predicates.containsPattern("n|m")); assertTrue(result); result = Iterables.all(names, Predicates.containsPattern("a")); assertFalse(result); }
下面看如何把一个list进行转换,
@Test public void whenTransformWithIterables_thenTransformed() { Function<String, Integer> function = new Function<String, Integer>() { @Override public Integer apply(String input) { return input.length(); } }; List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Iterable<Integer> result = Iterables.transform(names, function); assertThat(result, contains(4, 4, 4, 3)); }
再看结合transform和predicates结合使用的例子:
@Test public void whenCreatingAFunctionFromAPredicate_thenCorrect() { List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Collection<Boolean> result = Collections2.transform(names, Functions.forPredicate(Predicates.containsPattern("m"))); assertEquals(4, result.size()); assertThat(result, contains(false, false, true, true)); }
在这个例子中,将一个LIST中的每一个元素进行使用Predicates.containsPattern,判断是否包含m,返回的是boolean,然后再得到的boolean值一起转换为collection
下面是两个function一起结合使用的例子:
@Test public void whenTransformingUsingComposedFunction_thenTransformed() { Function<String,Integer> f1 = new Function<String,Integer>(){ @Override public Integer apply(String input) { return input.length(); } }; Function<Integer,Boolean> f2 = new Function<Integer,Boolean>(){ @Override public Boolean apply(Integer input) { return input % 2 == 0; } }; List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Collection<Boolean> result = Collections2.transform(names, Functions.compose(f2, f1)); assertEquals(4, result.size()); assertThat(result, contains(true, true, true, false)); }
在这个例子中,首先应用函数f1,求出每个元素的长度,然后再根据f1函数,分别返回
它们的boolean值,再转换为collection.
最后看下将filter和transform结合使用的例子:
@Test public void whenFilteringAndTransformingCollection_thenCorrect() { Predicate<String> predicate = new Predicate<String>() { @Override public boolean apply(String input) { return input.startsWith("A") || input.startsWith("T"); } }; Function<String, Integer> func = new Function<String,Integer>(){ @Override public Integer apply(String input) { return input.length(); } }; List<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Collection<Integer> result = FluentIterable.from(names) .filter(predicate) .transform(func) .toList(); assertEquals(2, result.size()); assertThat(result, containsInAnyOrder(4, 3)); }
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1592方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2022前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3477info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2242import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 495https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 695public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 620https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 674https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 442https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5481 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3110微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 624https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1847什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 969本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1372原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 868public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 677在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 944-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 775一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1911介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
1. **Guava集合类**:Guava提供了一些增强版的集合类,如Multiset(多集)、Multimap(多映射)和Table(表格),这些类能够处理更复杂的集合操作。Multiset允许元素有多个计数,而Multimap可以将一个键映射到多个值...
布隆过滤器是一种高效的空间节省的数据结构,用于判断一个元素是否可能在一个集合中,但可能会产生一定的误判率。它由一个很长的二进制向量和多个独立的哈希函数组成。布隆过滤器的基本原理是,当一个元素被添加到...
以上只是 Guava 30.1.1 版本中的一部分核心功能,实际使用中还有许多其他实用工具类,如 `Range`, `EventBus`, `RateLimiter` 等。Guava 的设计目标是提高代码质量和效率,通过提供这些工具类,开发者可以更加专注于...
**布隆过滤器(Bloom Filter)**是一种空间效率极高的概率型数据结构,用于测试一个元素是否在一个集合中。由Burton Howard Bloom在1970年提出,主要用于节省存储空间,尤其在大数据场景下,它能有效地解决大规模...
布隆过滤器(Bloom Filter)是计算机科学中一种高效的空间节省的数据结构,主要用于判断一个元素是否可能存在于一个大规模集合中。它由伯特·布隆(Burton Howard Bloom)在1970年提出,因此得名。布隆过滤器在处理...
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它可能会误判,但不会漏判,即可能存在假阳性(False Positive),但绝不会有假阴性(False Negative)。...
在Guava库中,条件是一种强大的工具,用于在Java代码中创建和应用过滤器。它是一个返回布尔值的函数,可以用于测试对象是否满足特定条件。例如,我们可以创建一个条件来检查一个整数是否大于10: ```java Predicate...
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。由布隆在1970年提出,它不像传统的数据结构如哈希表那样保证不误判,而是允许有一定的错误率。这种特性使得...
Java 8 和 Google Guava 都是 Java 开发者在处理集合操作时的重要工具,它们提供了许多方便的功能,如流(Stream)、函数式编程、缓存、多线程支持等。这里我们将深入探讨 Guava 与 Java 8 Stream API 在功能、用法...
在Java编程中,`List`过滤是一个常见的任务,它涉及到集合操作和条件判断。当我们需要从一个`List`中筛选出满足特定条件的元素时,Java提供了多种方式来实现这一功能。这篇博客“java list 过滤”可能深入探讨了这些...
Guava的BloomFilter提供了创建、添加元素和查询元素的方法,并且支持动态调整过滤器的大小以控制误判率。以下是一个简单的使用示例: ```java import com.google.common.hash.BloomFilter; import ...
在Java中,布隆过滤器的实现非常便捷,尤其是利用了Guava库提供的BloomFilter类。开发者可以非常简单地通过调用put方法添加元素,通过mayContain方法来检查元素是否存在。不仅如此,布隆过滤器还允许开发者自定义...
例如,Java中的Guava库提供了BloomFilter类。在测试中,我们可以看到,即使是百万级别的数据集,判断一个元素是否存在于集合中,也只需要几十微秒的时间,性能极其高效。同时,布隆过滤器的误判率可以通过设置参数...
在这里,我们可以使用 Guava 库的 `Maps.filterKeys` 方法来过滤 Map 中的数据,例如: ```java Map, String> map = Maps.filterKeys(WEEK, r -> r ); ``` 这种方式非常简洁和高效。 总结 在本文中,我们讨论了...
布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中,存在一定的误判率。 2. **BloomFilter(布隆过滤器)** 布隆过滤器由一个很长的二进制向量和几个独立的哈希函数组成。当一个...
这个早期版本的Google Collections库虽然没有后来的Guava库那么全面,但它已经展示了强大的功能和对Java集合框架的深入理解。在那个年代,它极大地推动了Java社区对于更高效、更易用的代码实践的探索和发展。如果你...
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它可能会误判,但不会漏判,即可能会将不存在的元素判断为存在,但不会将存在的元素判断为不存在。这种特性使得...
7. **Google Guava**:Guava是Google提供的一套广泛使用的Java库,涵盖了缓存、并发、集合、I/O等多个领域,其强大的功能和优秀的性能受到许多开发者喜爱。 8. **Spring Framework**:对于企业级应用开发,Spring...
例如,`Collections2.filter()`方法可以根据指定的条件过滤集合元素,`Iterables.transform()`则可以将一个集合中的每个元素应用一个函数进行转换。 在实际开发中,谷歌Collection包的这些高级数据结构和工具极大地...
`Stream`可以对集合、数组等数据源进行操作,如过滤(`filter()`)、映射(`map()`)和聚合(`collect()`)。 7. **`java.util.concurrent` 包**: - 提供并发编程工具,如线程池(`ExecutorService`)、同步工具...