- 浏览: 599340 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
Problem
你想要筛选出集合中的一些元素形成一个新的集合,这些元素都是满足你的筛选条件的。
Solution
“选择一个集合方法来解决问题”,大量的方法可以被用来过滤输入集合的元素然后生成新的集合。这一节中展示了filter方法。那么如何正确使用集合的filter方法呢,首先你需要给filter方法一个判断条件或者返回true/false的函数,这个判断条件(函数)的输入类型要与集合元素类型一致,返回值是布尔型的。filter方法会对集合的每一个元素调用判断条件,当条件为true的时候则元素进入新的集合否则会被过滤掉。你还需要使用一个变量来指向新的集合。
下面这个例子展示了,如何通过取模算法从一个输入集合中筛选出偶数并形成一个新的集合:
正如上面展示的,filter方法返回了所有使假设条件(_ % 2 == 0)为真的集合元素组成的新集合。还有一个方法filterNot,可以返回所有使假设条件返回false的元素组成的新集合。
Discussion
在这里我们再来看一看都有什么: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的两个关键点是:
1.你的算法需要能正确判断出你所需要的元素,并返回true,对于你不需要的数据则返回false
2.记得用一个新的变量指向filter方法返回的集合,因为filter方法并不会对原集合做改变
你想要筛选出集合中的一些元素形成一个新的集合,这些元素都是满足你的筛选条件的。
Solution
“选择一个集合方法来解决问题”,大量的方法可以被用来过滤输入集合的元素然后生成新的集合。这一节中展示了filter方法。那么如何正确使用集合的filter方法呢,首先你需要给filter方法一个判断条件或者返回true/false的函数,这个判断条件(函数)的输入类型要与集合元素类型一致,返回值是布尔型的。filter方法会对集合的每一个元素调用判断条件,当条件为true的时候则元素进入新的集合否则会被过滤掉。你还需要使用一个变量来指向新的集合。
下面这个例子展示了,如何通过取模算法从一个输入集合中筛选出偶数并形成一个新的集合:
scala> val x = List.range(1, 10) x: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9) scala> val evens = x.filter(_ % 2 == 0) evens: List[Int] = List(2, 4, 6, 8)
正如上面展示的,filter方法返回了所有使假设条件(_ % 2 == 0)为真的集合元素组成的新集合。还有一个方法filterNot,可以返回所有使假设条件返回false的元素组成的新集合。
scala> val evens = x.filterNot(_ % 2 == 0) evens: List[Int] = List(1, 3, 5, 7, 9)
Discussion
在这里我们再来看一看都有什么: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方法允许你提供一个判断条件(函数),来过滤集合元素
如何筛选集合元素完全取决于你的算法,接下来的例子展示了一些方法来过滤字符串列表:
scala> val fruits = Set("orange", "peach", "apple", "banana") fruits: scala.collection.immutable.Set[String] = Set(orange, peach, apple, banana) scala> val x = fruits.filter(_.startsWith("a")) x: scala.collection.immutable.Set[String] = Set(apple) scala> val x = fruits.filter(_.length > 5) x: scala.collection.immutable.Set[String] = Set(orange, banana)
当你的判断逻辑复杂,没有办法一行写完,我们可以在filter内部使用多行的判断逻辑:
scala> val list = "apple" :: "banana" :: 1 :: 2 :: Nil list: List[Any] = List(apple, banana, 1, 2) scala> val strings = list.filter{ | case s:String => true | case _ => false | } strings: List[Any] = List(apple, banana)
你同样可以定义一个判断函数,然后把这个函数传给filter方法:
def onlyStrings(a: Any) = a match { case s: String => true case _ => false } scala> val strings = list.filter(onlyStrings) strings: List[Any] = List(apple, banana)
接下来的这个例子告诉你,你可以多次连续调用filter方法:
def getFileContentsWithoutBlanksComments(canonicalFilename: String): List[String] = { io.Source.fromFile(canonicalFilename) .getLines .toList .filter(_.trim != "") .filter(_.charAt(0) != '#') }
我们在一个文件中读取所有的行,转换为一个List,每行是一个元素,然后我们把空行过滤掉,然后再把#开头的过滤掉。看起来是一个统计shell脚本代码行数的算法。
使用filter的两个关键点是:
1.你的算法需要能正确判断出你所需要的元素,并返回true,对于你不需要的数据则返回false
2.记得用一个新的变量指向filter方法返回的集合,因为filter方法并不会对原集合做改变
发表评论
文章已被作者锁定,不允许评论。
-
Scala 在Intellij中搭建Scala环境(jdk8,scala2.11.4)
2017-06-02 16:33 14431.打开Intellij然后点击File->Plugin ... -
Scala Partial Functions(偏函数)学习
2017-04-24 10:54 344如果你想定义一个函数,而让它只接受和处理其参数定义域范围内的子 ... -
Scala 样本类(case class)和模式匹配(match)学习
2017-04-20 18:20 833样本类(case clas)和模式 ... -
Scala 作业题练习纪录
2017-04-20 14:39 10021.用reduceLeft获取集合中最大元素 println ... -
Scala 闭包理解
2017-04-20 13:57 662闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。 ... -
Scala 各种符号的含义(->,:::,::,<-,=>)
2017-04-20 09:50 650:::运算符 :::(三个冒号)表示List的连接操作,比如: ... -
Scala apply方法学习(类和对象都存在apply方法)
2017-04-19 10:18 731Scala比Java更面向对象的一个方面是Scala没有静态成 ... -
Scala Map(映射)学习
2017-04-18 09:20 431Map(映射)是一种可迭代的键值对(key/value)结构。 ... -
Scala 元组Tuple学习
2017-04-17 16:12 640元组是Scala提供的一种 ... -
Scala 函数之map(返回集合)、reduce、flatMap、zip和foreach(无返回值)学习
2017-04-17 15:04 2230map和flatMap的区别 object collect ... -
Scala 符号 => 的用法(匿名函数(x:Int)=>x+1)
2017-04-17 10:58 6991. 表示函数的类型(Function Type) de ... -
Scala 下划线(_)的多种应用场景学习
2017-04-13 20:00 5881、作为“通配符”,类似Java中的*。如import sca ... -
Scala mkString方法(把一个集合转化为一个字符串)
2017-04-13 19:34 1207Problem 如果你想要把集合元素转化为字符串,可能还会添加 ... -
Scala yield案例 (for 循环和 yield 的例子)
2017-04-13 18:42 629下面是摘自 《Programming in Scala》关于 ... -
Scala 基本概念学习
2017-04-13 14:40 537Type Inference类型推断 当你声明的任何变量时,你 ...
相关推荐
bloom-filter-scala, 用于 Scala的Bloom过滤器,最快的JVM Scala的 Bloom filter 概述Bloom过滤器是一种空间高效的数据结构,用于测试某个元素是否是集合的成员。 false 正匹配是可能的,但 false 负数不是。 ...
- 使用Scala的惰性计算和集合优化,可以在不影响代码可读性的情况下提高性能。 通过以上步骤,我们可以高效地利用Scala和MyBatis实现数据库查询。这种结合不仅保持了Scala的优雅和强大,还充分利用了MyBatis的便利...
”可以将元素添加到集合中,但不能删除。”说。 简而言之,什么是Bloom过滤器: 优化内存。 当您无法将整个设备放入内存时,它就会发挥作用。 解决会员问题。 它可以回答一个问题:元素是否属于集合? 概率...
读者可以学习到如何使用映射(map)、过滤(filter)、折叠(fold)等函数,以及如何自定义集合操作。 总的来说,这四本书籍构建了一个完整的Scala学习体系,从基础知识到高级特性的实践,再到特定领域如函数式编程...
4. **集合API**:Scala的集合库非常强大,提供了丰富的操作,如转换、过滤和并行处理。它还支持`Option`类型来处理可能的null值,减少空指针异常。 5. **模式匹配**:Scala的模式匹配允许解构复杂数据结构,如`case...
- **flatMap、map和filter**:这些函数是函数式编程中的核心操作,用于转换和过滤集合。 3. **面向对象编程(OOP)** - **特质(Trait)**:Scala的特质提供了一种实现多继承和代码复用的方式,可以被类混合入。 ...
这些集合不仅支持传统的操作,还提供了函数式编程中的转换和过滤等功能,使得处理数据变得简单而高效。 6. ** Trait与Mixins**:Scala的Trait允许定义行为片段,可以被多个类混合(mixin)使用,从而实现了代码复用...
例如,`map`函数用于对集合中的每个元素应用一个函数并返回新集合;`filter`用于根据条件筛选元素;`reduce`或`fold`用于将所有元素组合成单一值;`groupBy`则可以按照指定条件对数据进行分组。 2. **模式匹配**:...
1. **类与对象**:Scala中的类是创建对象的基础,可能定义了一个`DVD`类,包含了`title`(标题)、`director`(导演)、`releaseYear`(发行年份)等属性,以及`borrow`(外借)和`return`(归还)等方法,用于管理...
除了上述的算子外,Scala 本身还提供许多强大的函数式编程特性,比如高阶函数、集合操作、模式匹配等,这些特性在 Spark 编程中也能得到充分利用。在学习 Spark 编程时,熟悉这些算子和 Scala 的函数式编程特性是...
* 作为占位符:在集合中的每一个元素,可以使用下划线作为占位符,例如 `val list=List(1,2,3,4) val list1=list.map(_ * 10)` * 获取元组中的元素:在元组中,可以使用下划线来获取具体的元素,例如 `val t=(...
在Scala中实现这些步骤,我们可以利用集合操作和函数式编程的优势。例如,`Map`类型可以用来存储类别及其对应的先验概率和条件概率;`fold`或`reduce`等函数可以用于计算频率;`filter`和`map`可用于预处理数据。 ...
使用`Option`类型处理可能存在的值或不存在的值的情况,`getOrElse`方法用于获取值或提供默认值。 #### 十三、处理除法运算的异常 ```scala object Demo13 { def divide(numerator: Int, denominator: Int): ...
在 Scala 中,数组和 Map 是两种非常常用的数据结构。数组用于存储同类型的固定大小的数据集合,而 Map 则用于存储键值对。接下来,我们将详细探讨数组的常见操作以及 Map 的使用方法。 **数组操作** 1. **创建...
在Scala编程语言中,操作符实际上都是方法,这是Scala的一个重要基础概念。例如,当我们写1 + 2时,这并不是一个特殊的语法结构,而是调用了1对象的+.方法,等同于1.+ (2)。如果在1后面直接跟一个点(1.),它会被...
为了更好地管理这些集合,Scala提供了一系列操作,如map、flatMap、filter等,这些操作使得对集合的操作更加简洁和直观。通过这些操作,开发者可以方便地进行数据过滤、转换以及组合操作。 并发编程是现代编程中不...
在大数据分析中,Scala的集合API是一大亮点,它提供了丰富的操作,如map、filter和reduce,这些在处理大规模数据时非常实用。 接下来是Apache Spark。Spark以其内存计算模型著称,极大地提高了数据处理速度,比传统...
【布隆过滤器(Bloom Filter)】是一种空间效率极高的概率型数据结构,用于测试一个元素是否在一个集合中。它可能会误报一个元素在集合中(假阳性),但不会漏报(假阴性)。布隆过滤器的核心在于一个位数组和多个独立...
5. **特质(Trait)**:Scala的特质提供了类似于接口的功能,但允许包含抽象方法的实现,可以用来实现多重继承或作为行为的组合单元。 6. **模式匹配**:Scala的模式匹配功能强大,支持对数据结构进行解构,以及在`...