![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
函数式编程
文章平均质量分 71
weixin_46722612
这个作者很懒,什么都没留下…
展开
-
Stream——其他操作
我们把Stream提供的操作分为两类:转换操作和聚合操作。除了前面介绍的常用操作外,Stream还提供了一系列非常有用的方法。排序对Stream的元素进行排序十分简单,只需调用sorted()方法:import java.util.*;import java.util.stream.*;public class Main { public static void main(String[] args) { List<String> list = List.of原创 2021-03-24 10:01:59 · 59 阅读 · 0 评论 -
Stream——输出集合
我们介绍了Stream的几个常见操作:map()、filter()、reduce()。这些操作对Stream来说可以分为两类,一类是转换操作,即把一个Stream转换为另一个Stream,例如map()和filter(),另一类是聚合操作,即对Stream的每个元素进行计算,得到一个确定的结果,例如reduce()。区分这两种操作是非常重要的,因为对于Stream来说,对其进行转换操作并不会触发任何计算!我们可以做个实验:import java.util.function.Supplier; impo原创 2021-03-24 10:01:40 · 1343 阅读 · 0 评论 -
Stream——使用reduce
map()和filter()都是Stream的转换方法,而Stream.reduce()则是Stream的一个聚合方法,它可以把一个Stream的所有元素按照聚合函数聚合成一个结果。我们来看一个简单的聚合方法:import java.util.stream.*;public class Main { public static void main(String[] args) { int sum = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9).r原创 2021-03-24 10:01:27 · 1518 阅读 · 0 评论 -
Stream——使用filter
Stream.filter()是Stream的另一个常用转换方法。所谓filter()操作,就是对一个Stream的所有元素一一进行测试,不满足条件的就被“滤掉”了,剩下的满足条件的元素就构成了一个新的Stream。例如,我们对1,2,3,4,5这个Stream调用filter(),传入的测试函数f(x) = x % 2 != 0用来判断元素是否是奇数,这样就过滤掉偶数,只剩下奇数,因此我们得到了另一个序列1,3,5:用IntStream写出上述逻辑,代码如下:import java.util.s原创 2021-03-24 10:01:12 · 2728 阅读 · 0 评论 -
Stream——使用map
Stream.map()是Stream最常用的一个转换方法,它把一个Stream转换为另一个Stream。所谓map操作,就是把一种操作运算,映射到一个序列的每一个元素上。例如,对x计算它的平方,可以使用函数f(x) = x * x。我们把这个函数映射到一个序列1,2,3,4,5上,就得到了另一个序列1,4,9,16,25:可见,map操作,把一个Stream的每个元素一一对应到应用了目标函数的结果上。Stream<Integer> s = Stream.of(1, 2, 3, 4, 5原创 2021-03-24 10:00:56 · 5272 阅读 · 0 评论 -
Stream——创建Stream
要使用Stream,就必须现创建它。创建Stream有很多种方法,我们来一一介绍。Stream.of()创建Stream最简单的方式是直接用Stream.of()静态方法,传入可变参数即创建了一个能输出确定元素的Stream:import java.util.stream.Stream;public class Main { public static void main(String[] args) { Stream<String> stream = Stre原创 2021-03-24 10:00:44 · 89 阅读 · 0 评论 -
函数式编程——使用Stream
Java从8开始,不但引入了Lambda表达式,还引入了一个全新的流式API:Stream API。它位于java.util.stream包中。划重点:这个Stream不同于java.io的InputStream和OutputStream,它代表的是任意Java对象的序列。两者对比如下:有同学会问:一个顺序输出的Java对象序列,不就是一个List容器吗?再次划重点:这个Stream和List也不一样,List存储的每个元素都是已经存储在内存中的某个Java对象,而Stream输出的元素可能并没有预先原创 2021-03-24 10:00:30 · 90 阅读 · 0 评论 -
函数式编程——方法引用
使用Lambda表达式,我们就可以不必编写FunctionalInterface接口的实现类,从而简化代码:Arrays.sort(array, (s1, s2) -> { return s1.compareTo(s2);});实际上,除了Lambda表达式,我们还可以直接传入方法引用。例如:import java.util.Arrays;public class Main { public static void main(String[] args) {原创 2021-03-24 10:00:15 · 121 阅读 · 0 评论 -
函数式编程——lambda基础
在了解Lambda之前,我们先回顾一下Java的方法。Java的方法分为实例方法,例如Integer定义的equals()方法:public final class Integer { boolean equals(Object o) { ... }}以及静态方法,例如Integer定义的parseInt()方法:public final class Integer { public static int parseInt(String s) {原创 2021-03-24 09:59:45 · 64 阅读 · 0 评论