【java学习之路】014.Stream API
作者:互联网
Stream API
Stream是一组用来处理数组、集合的API
▪ Java 8之所以费这么大功夫引入函数式编程,原因有二:
– 代码简洁函数式编程写出的代码简洁且意图明确,使用 stream 接口让你从此告别 for 循环。
– 多核友好,Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下parallel()方法。
Stream特性
1:不是数据结构,没有内部存储
2:不支持索引访问
3:延迟计算
4:支持并行
5:很容易生成数组或集合(List,Set)
6:支持过滤,查找,转换,汇总,聚合等操作
Stream运行机制
Stream分为 源source,中间操作,终止操作
流的源可以是一个数组、一个集合、一个生成器方法,一个I/O通道等等。
一个流可以有零个和或者多个中间操作,每一个中间操作都会返回
一个新的流,供下一个操作使用。一个流只会有一个终止操作
Stream只有遇到终止操作,它的源才开始执行遍历操作
Stream的创建
1、通过数组
2、通过集合来
3、通过Stream.generate方法来创建
4、通过Stream.iterate方法来创建
5、其他API创建
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class StreamDemo {
//通过数组来生成
static void gen1(){
String[] strs = {"a","b","c","d","e"};
Stream<String> strs1 = Stream.of(strs);
strs1.forEach(System.out::println);
}
//通过集合来生成
static void gen2(){
List<String> list = Arrays.asList("1","2","3","4");
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
}
//generate
static void gen3(){
Stream<Integer> generate = Stream.generate(()->1);
generate.limit(10).forEach(System.out::println);
}
//iterator
static void gen4(){
Stream<Integer> iterate = Stream.iterate(1, x -> x + 1);
iterate.limit(10).forEach(System.out::println);
}
//其他方式
static void gen5(){
String str = "abcdef";
IntStream stream = str.chars();
stream.forEach(System.out::println);
}
public static void main(String[] args) {
// gen1();
// gen2();
// gen3();
// gen4();
gen5();
}
}
Stream常用API
中间操作
过滤 filter
去重 distinct
排序 sorted
截取 limit、skip
转换 map/flatMap
其他 peek
终止操作
循环 forEach
计算 min、max、count、 average
匹配 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny
汇聚 reduce
收集器 toArray collect
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class Stream1 {
public static void main(String[] args) {
// List<Integer> list = Arrays.asList(5,4,3,2,1);
//注意,如果调用方法返回的是一个Stream对象,那就是中间操作
Arrays.asList(5,4,3,2,1).stream().filter((x)->x%2==0).sorted().forEach(System.out::println);
//求出结果中所有偶数的和
//mapToInt:转为IntStream类型
int sum = Arrays.asList(5, 4, 3, 2, 1).stream().filter((x) -> x % 2 == 0).mapToInt(x -> x).sum();
System.out.println(sum);
//求集合中的最大值
List<Integer> list = Arrays.asList(5, 4, 3, 2, 1);
Optional<Integer> max = list.stream().max((a, b) -> a - b);
System.out.println(max.get());
}
}
标签:java,Stream,stream,System,API,014,println,out 来源: https://blog.csdn.net/qq_24254611/article/details/122759686