1 stream是什么?
stream是数据渠道,用于操作集合、数组等所生成的元素序列
2 stream操作的三个步骤
(1)创建
(2)中间操作
(3)终止操作
创建
@Test
public void test1() {
List<String> list = new ArrayList<>();
// 通过集合中的stream方法
Stream<String> stream1 = list.stream();
// 通过Arrays中的静态方法stream()
Stream<String> stream2 = Arrays.stream(new String[10]);
// 通过Stream类中的of()
Stream<String> stream3 = Stream.of("1","2","3","4");
}
中间操作
(1)筛选、切片
// filter过滤
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9);
list.stream().filter((e) -> e > 6).forEach(System.out::println);
// 返回结果:7,8,9
// limit截断
list.stream().limit(5).forEach(System.out::println);
// 返回结果:1,2,3,4,5
// skip跳过
list.stream().skip(5).forEach(System.out::println);
// 返回结果:6,7,8,9
// distinct去重(对于对象而言,需重写该对象的hashcode()和equals()方法)
List<Integer> list1 = Arrays.asList(1,1,1,1,5,6,7,8,9);
list1.stream().distinct().forEach(System.out::println);
// 返回结果:1,5,1,6,7,8,9
(2)映射
// map 接收lambda,将元素转换成其他形式提取信息
// 对于list中特定的字段进行重新运算赋值
personList.stream().map((e) -> e.getAge() * 10).forEach(System.out::println);
// 提取list中的名字
personList.stream().map(Person::getName).forEach(System.out::println);
// flatMap 接收一个函数作为参数,将每个值都换成一个流,把所有流连接成一个流
(3)排序
// sorted()自然排序,sorted(Comparator com)指定排序
personList.stream().sorted(Comparator.comparing(Person::getAge));
终止操作
(1) 查找、匹配
/* allMatch 是否匹配所有元素
anyMatch 是否至少匹配一个预算
noneMatch 是否没有匹配所有元素
findFirst 返回第一个元素
findAny 返回当前流中任意元素
count 返回总数
max 返回最大值
min 返回最小值
*/
(2)规约
/*
reduce 可以将流中元素反复结合起来,得到一个新的值
*/
System.out.println(list.stream().reduce(0, (x, y) -> x + y));
返回结果:45
// 没有起始值,有可能为空,所以用optional去接收
Optional<Integer> optional = personList.stream().map(Person::getSalary).reduce(Integer::sum);
System.out.println(optional.get());
(3)收集
/*
将流转换为其他形式。接收一个Collector接口的实现
*/
// 获取list中名字重新组成一个list
personList.stream().map(Person::getName).collect(Collectors.toList());