流的迭代 创建流在java中Stream是一个接口
一.直接创建
import java.util.stream.Stream; Streamstream = Stream.of("苹果", "哈密瓜", "香蕉", "西瓜", "火龙果");
二.由数组转化
String[] fruitArray = new String[] {"苹果", "哈密瓜", "香蕉", "西瓜", "火龙果"};
Stream stream = Stream.of(fruitArray);
三.由集合转化
Listfruits = new ArrayList<>(); fruits.add("苹果"); fruits.add("哈密瓜"); fruits.add("香蕉"); fruits.add("西瓜"); fruits.add("火龙果"); Stream stream = fruits.stream();
流数据过滤流的迭代也是由foreach()方法但和集合中的foreach不一样(遍历数据是一样的)
filter()方法
功能为对流中的数据进行过滤
方法参数是一个Lambda表达式,箭头后是条件语句,判断数据需要符合的条件也就是使用Lambda表达式告诉过滤器,需要那些符合条件的数据
pupils.stream()
.filter(pupil -> pupil.getAverageScore() >= 80 && pupil.getViolationCount() < 1)
.forEach(pupil -> {System.out.println(pupil.getName());});
流数据映射这里的Lambda表达式略有不同,因为是条件语句所以表达式放在()而不是{}中
流中的map()方法就是映射,作用是用新的元素替换掉原来相同位置的元素,相当于每个对象都经历过依次转换
map()方法的参数是一个Lambda表达式,在语句块中对流中的每个数据进行计算处理,最后return返回的对象就是转换后的对象
优点:
流数据排序映射后的对象类型可以与原始的不一致提供了灵活性和扩展性
用Stream API实现学生学号排序:
Liststudents = new ArrayList (); students.add(new Student(111, "bbbb", "london")); students.add(new Student(131, "aaaa", "nyc")); students.add(new Student(121, "cccc", "jaipur")); students.stream() // 实现升序排序 .sorted((student1, student2) -> { return student1.getRollNo() - student2.getRollNo(); }) .forEach(System.out::println);
流数据的摘取这里的student1指的是后一个元素,student2是前一个元素
对一组数字找出最大的前3个数字
numbers.stream()
.sorted((n1, n2) -> n2 - n1)
.limit(3)
.forEach(System.out::println);
limit()方法的作用就是返回流前n个元素,n不能为负数
流的设计思想不是摘取任意位置,只能是流开头
数据流的操作过程可以看做一个管道,管道由多个节点组成,每个节点完成一个操作
数据流输入这个管道,按照顺序经过各个节点
Stream的显著特点是:编程的重点不再是对象的运用而是数据的计算
Stream的特征为:函数式风格,弱化了面向对象的严格,完整的语法重心变为通过函数完成数据计算



