Java 8 中的 Stream 是对集合(Collection)对象功能的增强,对集合对象进行各种便利、高效的聚合操作,与 Lambda 表达式结合提高编程效率和程序可读性。提供串行和并行两种模式,具有延迟加载的功能,并发模式利用多核处理器的优势,提高程序性能。
得到stream流的几种方式:
//集合得到stream
List<String> list = Arrays.asList(new String[]{"1", "2", "3"});
//返回串行流
list.stream();
//返回并行流
list.parallelStream();
//Stream 得到 stream
Stream<String> stringStream= Stream.of("1","2","3");
// 数组得到 stream
String[] arr=new String[2];
Arrays.stream(arr);
Stream 是具有延迟加载功能的 Stream 中的方法分为中间操作和终止操作两种 中间操作是不会运行的只有等到终止操作时才会运行.
中间操作有
筛选与切片与排序:
filter 过滤
limit 获取指定数量数据
skip 跳过指定数量数据
distinct 去重 hashCode() 和 equals()
sorted 排序
iterate 可以无线循环生成
public void e(){
List<Integer> list = Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9,10});
list.stream().filter((x) -> x>1)
.limit(3)
.skip(1)
.distinct()
.forEach(System.out::println);
}
@Test
public void d(){
List<Integer> list = Arrays.asList(new Integer[]{4,2,1,3});
// map 映射 接收一个函数返回 一个新的stream
Stream<Integer> integerStream = list.stream().map((s)->s+1);
integerStream.forEach(System.out::println);
}
@Test
public void b(){
//无线循环生成数据
Stream<Integer> stream = Stream.iterate(0,x ->{
System.out.println(x);;return x+1;});
}
映射
map 接收一个函数然后 根据函数返回的值生成一个新元素的流
@Test
public void d(){
List<Integer> list = Arrays.asList(new Integer[]{4,2,1,3});
// map 映射 接收一个函数返回 一个新的stream
Stream<Integer> integerStream = list.stream().map((s)->s+1);
integerStream.forEach(System.out::println);
}
终止操作有
count 返回总量
max 返回最大
min 返回最小
allMatch 返回bool值 匹配所有
anyMatch 返回bool值 匹配至少一个
noneMatch 返回bool值 是否都不匹配
findFirst 返回第一个元素
findAny 返回当前流中的任意元素
@Test
public void e(){
List<Integer> list = Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9,10});
list.stream().limit(3).count();
list.stream().limit(3).allMatch((x)->x>0);
}
归约 reduce 如同hadoop 中的mapReduce
@Test
public void d(){
List<Integer> list = Arrays.asList(new Integer[]{4,2,1,3});
Optional<Integer> reduce = list.stream().reduce((x, y)->{return x+y;});
System.out.println(reduce);
}
collect
@Test
public void g(){
Stream<String> stringStream= Stream.of("1","2","3");
stringStream.collect(Collectors.toList());
}