使用filter方法过滤集合元素
文章转自https://my.oschina.net/nenusoul/blog/658238
Problem
你想要筛选出集合中的一些元素形成一个新的集合,这些元素都是满足你的筛选条件的。
Solution
在10.3节中,“选择一个集合方法来解决问题”,大量的方法可以被用来过滤输入集合的元素然后生成新的集合。这一节中展示了filter方法。那么如何正确使用集合的filter方法呢,首先你需要给filter方法一个判断条件或者返回true/false的函数,这个判断条件(函数)的输入类型要与集合元素类型一致,返回值是布尔型的。filter方法会对集合的每一个元素调用判断条件,当条件为true的时候则元素进入新的集合否则会被过滤掉。你还需要使用一个变量来指向新的集合。
下面这个例子展示了,如何通过取模算法从一个输入集合中筛选出偶数并形成一个新的集合:

正如上面展示的,filter方法返回了所有使假设条件(_ % 2 == 0)为真的集合元素组成的新集合。还有一个方法filterNot,可以返回所有使假设条件返回false的元素组成的新集合。

Discussion
你可以使用的用来过滤集合主要方法已经在10.3节展示过了,在这里我们再来看一看都有什么:collect、diff、distinct、frop、dropWhile、filter、filterNot、find、foldLeft、foldRight、head、headOption、init、intersect、last、lastOption、reduceLeft、reduceRight、remove、slice、tail、take、takeWhile、union。
filter方法对比其他方法的特点有:
filter方法遍历整个集合,其他的方法都只是遍历一部分元素
filter方法允许你提供一个判断条件(函数),来过滤集合元素
如何筛选集合元素完全取决于你的算法,接下来的例子展示了一些方法来过滤字符串列表:

当你的判断逻辑复杂,没有办法一行写完,我们可以在filter内部使用多行的判断逻辑:

你同样可以定义一个判断函数,然后把这个函数传给filter方法:

接下来的这个例子告诉你,你可以多次连续调用filter方法:

我们在一个文件中读取所有的行,转换为一个List,每行是一个元素,然后我们把空行过滤掉,然后再把#开头的过滤掉。看起来是一个统计shell脚本代码行数的算法。
使用filter的两个关键点是:
你的算法需要能正确判断出你所需要的元素,并返回true,对于你不需要的数据则返回false
记得用一个新的变量指向filter方法返回的集合,因为filter方法并不会对原集合做改变
使用filter方法过滤集合元素的更多相关文章
- 数组filter方法对数组元素进行过滤
Array.prototype.filter对数组中元素进行过滤 /** * @method reduce * @param {number} item 当前迭代的数组元素 * @param {num ...
- 重写Java Object对象的hashCode和equals方法实现集合元素按内容判重
Java API提供的集合框架中Set接口下的集合对象默认是不能存储重复对象的,这里的重复判定是按照对象实例句柄的地址来判定的,地址相同则判定为重复,地址不同不管内容如何都判定为不重复,这有时与需求不 ...
- 使用Guava提供的filter过滤集合
正常情况下,我们声明一个List需要如下代码 List<String> list = new ArrayList<>(); list.add("AAA"); ...
- map方法,以及filter方法的使用
map()方法,会返回一个 jQuery 封装的数组, 这个数组不能直接使用,需要使用 get() 来处理返回的对象以得到基础的数组. 例子: <!DOCTYPE html> <ht ...
- Vue--使用watch、computed、filter方法来监控
watch与computed.filter: watch:监控已有属性,一旦属性发生了改变就去自动调用对应的方法 computed:监控已有的属性,一旦属性的依赖发生了改变,就去自动调用对应的方法 f ...
- java 数据类型:集合接口Collection之常用ArrayList;lambda表达式遍历;iterator遍历;forEachRemaining遍历;增强for遍历;removeIf批量操作集合元素(Predicate);
java.util.Collection接口 Java的集合主要由两个接口派生出来,一个是Collection一个是Map,本章只记录Collection常用集合 集合只能存储引用类型数据,不能存储基 ...
- laravel的filter()方法的使用 (方法使用给定的回调函数过滤集合的内容,只留下那些通过给定真实测试的内容)
filter 方法使用给定的回调函数过滤集合的内容,只留下那些通过给定真实测试的内容: $collection = collect([1, 2, 3, 4]); $filtered = $collec ...
- 数组方法map(映射),reduce(规约),foreach(遍历),filter(过滤)
数组方法map(映射),reduce(规约),foreach(遍历),filter(过滤) map()方法返回一个由原数组中每一个元素调用一个指定方法后返回的新数组 reduce()方法接受一个函数作 ...
- Java修炼——ArrayList常用的方法以及三种方式遍历集合元素。
List接口ArrayList用法详解 ArrayList常用方法: 1. List.add():添加的方法(可以添加字符串,常量,以及对象) List list=new ArrayList(); l ...
随机推荐
- Html 模态框操作
<style> #modal-overlay { visibility: hidden; position: absolute; /* 使用绝对定位或固定定位 */ left: 0px; ...
- jvm实战-基本类型占多少内存
jvm内存占用模型 对象的内存结构 对象头 Header 包含两部分数据Mark Word和Kclass: Mark Word:存储对象自身的运行时数据,如hashCode.GC分代年龄.锁状态标志. ...
- windows下练习linux shell
<---开始学习linux---记录一下---路漫漫其修远兮---加油吧---萌萌达> 使用软件:Cygwin 下载地址(免安装版):链接: http://pan.baidu.com/s ...
- C语言之数组
数组 数组就是在内存空间中,开辟一个大的空间,然后再将这个大的空间均的分为若干份的小空间,每个小空间用来保存一个数据. 1). 数组的专业术语: 长度:指的能存放数据的个数 下标/索引:每一个数据所在 ...
- Linux编程之UDP SOCKET全攻略
这篇文章将对linux下udp socket编程重要知识点进行总结,无论是开发人员应知应会的,还是说udp socket的一些偏僻知识点,本文都会讲到.尽可能做到,读了一篇文章之后,大家对udp so ...
- windows下的畸形目录和文件的创建与删除
畸形目录的创建 md c:\a..\ 删除畸形目录 rd /s /q c:\a..\ 创建畸形文件 1 echo text> \\.\c:\aux..txt 读取畸形文件 type \\.\c: ...
- jquery新版本不支持toggle()的解决方法
toggle() 方法用于绑定两个或多个事件处理器函数,以响应被选元素的轮流的 click 事件. 在1.9以后官方废除了这个方法: 解决如下 在需要调用的js文件下引用 $.fn.toggle = ...
- json字符串参数
jsp部分 json字符串的属性应该都是实体类的属性 function saveCashier(){ layer.closeAll(); var Reapply = document.g ...
- 原图旋转/缩放 然后画布画图 ImageProcessor
//旋转 byte[] photoBytes = File.ReadAllBytes(HttpContext.Current.Server.MapPath(diyInfo.ImageUrl)); Im ...
- 将Cygwin Emacs设为Windows explorer默认打开程序
由于我在平日的学习与工作中会经常用到Cygwin中的Emacs,很自然地想到应该将emacsclient作为指定文件类型在Windows explorer中的默认打开程序.这样,便可以直接双击文件后在 ...