在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<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom");
Iterable<String> 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<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom");
Collection<String> 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<Integer> collections = Lists.newArrayList(1, 2, 3, 4);
Collection<Integer> filter = Collections2.filter(
collections, new Predicate<Integer>() {
@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<Integer> list = Lists.newArrayList(1, 2, 3, 4);
List<String> transform = Lists.transform(list, new Function<Integer, String>() {
@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<String> names = Lists.newArrayList("John", "Jane", "Adam", "Tom");
Collection<String> 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<String> names = Lists.newArrayList("John", null, "Jane", null, "Adam", "Tom");
Collection<String> 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<String> 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);
}
}

Guava中针对集合的 filter和过滤功能的更多相关文章

  1. js 根据条件删除数组中某个对象&js filter (find)过滤数组对象的使用

    删除 ----  item不设置 arr.splice(1,1)   //['a','c','d']         删除起始下标为1,长度为1的一个值,len设置的1,如果为0,则数组不变 arr. ...

  2. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  3. [Google Guava] 强大的集合工具类:java.util.Collections中未包含的集合工具

    转载的,有问题请联系我 原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collecti ...

  4. 使用filter方法过滤集合元素

    文章转自https://my.oschina.net/nenusoul/blog/658238 Problem 你想要筛选出集合中的一些元素形成一个新的集合,这些元素都是满足你的筛选条件的. Solu ...

  5. addBack() 添加堆栈中元素集合到当前集合,一个选择性的过滤选择器。

    addBack() 概述 添加堆栈中元素集合到当前集合,一个选择性的过滤选择器. 如上所述在讨论中的.end(), jQuery对象维护一个堆栈内部来跟踪匹配的元素集合的变化.当一个DOM遍历方法被调 ...

  6. Java经典类库-Guava中的函数式编程讲解

    如果我要新建一个java的项目,那么有两个类库是必备的,一个是junit,另一个是Guava.选择junit,因为我喜欢TDD,喜欢自动化测试.而是用Guava,是因为我喜欢简洁的API.Guava提 ...

  7. Scala_针对集合的操作

    针对集合的操作 遍历操作 列表的遍历 scala> val list = List(1,2,3,4,5,6) list: List[Int] = List(1, 2, 3, 4, 5, 6) s ...

  8. Python中针对函数处理的特殊方法

    Python中针对函数处理的特殊方法 很多语言都提供了对参数或变量进行处理的机制,作为灵活的Python,提供了一些针对函数处理的特殊方法 filter(function, sequence):对se ...

  9. ☕【Java技术指南】「Guava Collections」实战使用相关Guava不一般的集合框架

    Google Guava Collections 使用介绍 简介 Google Guava Collections 是一个对 Java Collections Framework 增强和扩展的一个开源 ...

随机推荐

  1. 最小生成树问题(prim算法)POJ-1258 Agri-Net

    /* 这个题很水,但是,莫名其妙runtime error一晚上,重写了一遍就又没了,很伤心! 题意很简单,大致为n个村庄,连光缆,要求连上所有村庄的长度最短. 输入n,接着是n*n的矩阵,直接用pr ...

  2. pymysql模块 执行sql封装

    封装pymysql模块执行sql class HandCost(object): """ 处理数据库中的数据 """ def __init_ ...

  3. 006.FTP用户访问控制配置

    一 FTP控制文件 1.1 文件说明 /etc/vsftpd/ftpusers:黑名单,优先级高 #通常不修改此文件 /etc/vsftpd/user_list:黑名单,优先级相对低 注意:Linux ...

  4. python tcp 实时抓包

    问题:之前我们系统上线后,因为是旧的系统,没有加统计的功能,比如用户喜欢那个页面,是哪些用户再访问,接口的负载能力等等. 解决办法:1,现有代码更改,添加功能.现有代码侵入太多,工作量比较大 2,想到 ...

  5. 微信支付回调取不到body体中的信息node.js

    因为支付回调返回的数据格式为XML数据格式,需要安装组件body-parser-xml 安装语法:   npm install body-parser-xml --save 在app.js 文件中引入 ...

  6. 使用 IntraWeb (1) - 先测试如何部署为 Asp.Net 的应用

    IntraWeb 14 可以部署为 Asp.Net 的应用程序, 需要 NET Framework 4.5 和 ASP.NET MVC 4 或之上版本的支持; 这下, 只能用虚拟主机的朋友有福了! 我 ...

  7. 企点微服务网关演进之路 IT大咖说 - 大咖干货,不再错过

      http://www.itdks.com/dakashuo/new/dakalive/detail/2297

  8. HDU 4734 F(x) (2013成都网络赛,数位DP)

    F(x) Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. QQ去除未读状态的动画

    QQ去除未读状态的动画 by 伍雪颖 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmFpbmxlc3Zpbw==/font/5a6L5L2T/fonts ...

  10. Flume 1.5.0简单部署试用

    ================================================================================ 一.Flume简介 ========= ...