没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Java 流
Java 流操作
外部迭代
当使用 Java 集合时,我们使用外部迭代。
在外部迭代中,我们为每个循环使用 for 或,或者为序列中的集合的集合和过程
元素获取迭代器。
以下代码计算列表中所有奇整数的平方和。
它使用每个循环访问列表中的每一个元素,然后使用 if 语句来过滤奇整数。
之后,它计算平方,最后存储平方和与和变量。
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = 0;
for (int n : numbers) {
if (n % 2 == 1) {
int square = n * n;
sum = sum + square;
}
}
System.out.println(sum);
}
}
上面的代码生成以下结果。
内部迭代
我们可以使用 stream 重写上面的代码。 它做的完全一样。
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.filter(n -> n % 2 == 1)
.map(n -> n * n)
.reduce(0, Integer::sum);
System.out.println(sum);
}
}
在上面的代码中,我们没有使用循环语句来遍历 List。 我们通过流在内部执行循环。
对于奇整数计算,我们使用 lambda 表达式。 我们首先做了过滤,然后映射然后减少。
上面的代码生成以下结果。
顺序
外部迭代通常意味着顺序代码。顺序代码只能由一个线程执行。
流被设计为并行处理元素。
以下代码并行计算列表中奇整数的平方和。
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream()
.filter(n -> n % 2 == 1)
.map(n -> n * n)
.reduce(0, Integer::sum);
System.out.println(sum);
}
}
我们做的只是用 parallelStream()替换 stream()。
使用流提供的内部迭代时,并行计算很容易。
上面的代码生成以下结果。
命令式与功能式
在命令式编程中,我们不仅控制要做什么,还要如何做。
例如,当使用命令性编程来对列表中的整数求和时。 我们必须决定如何迭代列表中的
每个元素。 我们可以使用 for 循环,for-each 循环,或者我们可以从 list 中获取一个
Iterator 对象,并使用 while 循环。 然后我们也要做总和。
在声明性编程中,我们只需要告诉该做什么,该部分如何由系统本身处理。
集合支持命令式编程,而流支持声明式编程。
Streams API 通过使用 lambda 表达式支持函数式编程。
我们要对流元素执行的操作通常通过传递 lambda 表达式完成。
流上的操作产生结果而不修改数据源。
中间业务终端业务
流支持两种类型的操作:
� 中间操作
� 终端操作
中间操作也称为惰性操作。
终端操作也称为急切操作。
惰性操作不处理元素,直到在流上调用热切操作。
流上的中间操作产生另一流。
Streams 链接操作以创建流管道。
在下面的代码中 filter()和 map()都是惰性操作。 而 reduce()是急切的操作。
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream()
.filter(n -> n % 2 == 1)
.map(n -> n * n)
.reduce(0, Integer::sum);
System.out.println(sum);
}
}
上面的代码生成以下结果。
剩余41页未读,继续阅读
资源评论
Andy&lin
- 粉丝: 132
- 资源: 217
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功