博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Guava中针对集合的 filter和过滤功能
阅读量:6074 次
发布时间:2019-06-20

本文共 4298 字,大约阅读时间需要 14 分钟。

在guava库中,自带了过滤器(filter)的功能,可以用来对collection 进行过滤,先看例子: 

import com.google.common.base.Predicates;import com.google.common.collect.Iterables;import com.google.common.collect.Lists;import java.util.List;public class Test {    public static void main(String[] args) {        List
names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Iterable
result = Iterables.filter(names, Predicates.containsPattern("a")); // [Jane, Adam] System.out.println(result); }}

在这个例子中,给出一个list,过滤出含有字母a的元素 

此外,可以使用Collections2.filter() 去进行过滤 

import com.google.common.base.Predicates;import com.google.common.collect.Collections2;import com.google.common.collect.Lists;import java.util.Collection;import java.util.List;public class Test {    public static void main(String[] args) {        List
names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Collection
result = Collections2.filter(names, Predicates.containsPattern("a")); // [Jane, Adam] System.out.println(result); }}

再来看下predicates判断语言, 

com.google.common.base. Predicate : 根据输入值得到 true 或者 false 
拿Collections2中有2个函数式编程的接口:filter , transform ,例如 :在Collection<Integer>中过滤大于某数的内容:

import com.google.common.base.Predicate;import com.google.common.collect.Collections2;import com.google.common.collect.Lists;import java.util.Collection;import java.util.List;public class Test {    public static void main(String[] args) {        List
collections = Lists.newArrayList(1, 2, 3, 4); Collection
filter = Collections2.filter( collections, new Predicate
() { @Override public boolean apply(Integer input) { return input >= 3; } }); // [3, 4] System.out.println(filter); }}

把Lis<Integer>中的Integer类型转换为String , 并添加test作为后缀字符

import com.google.common.base.Function;import com.google.common.collect.Lists;import java.util.List;public class Test {    public static void main(String[] args) {        List
list = Lists.newArrayList(1, 2, 3, 4); List
transform = Lists.transform(list, new Function
() { @Override public String apply(Integer input) { return input + "_test"; } }); // [1_test, 2_test, 3_test, 4_test] System.out.println(transform); }}

需要说明的是每次调用返回都是新的对象,同时操作过程不是线程安全的。 

将多个prdicate进行组合 

import com.google.common.base.Predicates;import com.google.common.collect.Collections2;import com.google.common.collect.Lists;import java.util.Collection;import java.util.List;public class Test {    public static void main(String[] args) {        List
names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); Collection
result = Collections2.filter(names, Predicates.or(Predicates.containsPattern("J"), Predicates.not(Predicates.containsPattern("a")))); // [John, Jane, Tom] System.out.println(result); }}

上面的例子中找出包含J字母或不包含a的元素; 

再看下如何将集合中的空元素删除: 

import com.google.common.base.Predicates;import com.google.common.collect.Collections2;import com.google.common.collect.Lists;import java.util.Collection;import java.util.List;public class Test {    public static void main(String[] args) {        List
names = Lists.newArrayList("John", null, "Jane", null, "Adam", "Tom"); Collection
result = Collections2.filter(names, Predicates.notNull()); // [John, Jane, Adam, Tom] System.out.println(result); }}

检查一个collection中的所有元素是否符合某个条件: 

import com.google.common.base.Predicates;import com.google.common.collect.Iterables;import com.google.common.collect.Lists;import java.util.List;public class Test {    public static void main(String[] args) {        List
names = Lists.newArrayList("John", "Jane", "Adam", "Tom"); boolean result = Iterables.all(names, Predicates.containsPattern("n|m")); // true System.out.println(result); result = Iterables.all(names, Predicates.containsPattern("a")); // false System.out.println(result); }}

 

转载地址:http://tlngx.baihongyu.com/

你可能感兴趣的文章
修改字符集
查看>>
HackTheGame 攻略 - 第四关
查看>>
js删除数组元素
查看>>
带空格文件名的处理(find xargs grep ..etc)
查看>>
华为Access、Hybrid和Trunk的区别和设置
查看>>
centos使用docker下安装mysql并配置、nginx
查看>>
关于HTML5的理解
查看>>
需要学的东西
查看>>
Internet Message Access Protocol --- IMAP协议
查看>>
Linux 获取文件夹下的所有文件
查看>>
对 Sea.js 进行配置(一) seajs.config
查看>>
dom4j解析xml文件
查看>>
第六周
查看>>
解释一下 P/NP/NP-Complete/NP-Hard 等问题
查看>>
javafx for android or ios ?
查看>>
微软职位内部推荐-Senior Software Engineer II-Sharepoint
查看>>
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>