stream() − 为集合创建串行流。
parallelStream() − 为集合创建并行流。
在最近的测试中,发现流Stream用的频率非常高,类似SQL的操作
两个基本特征
1、Pipelining:中间操作都会返回流对象本身,这样多个操作可以串联成一个管道
2、内部迭代:以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。
import java.util.*; import java.util.stream.Collectors; public class test { // Stream的来源,可以是集合、数组、I/Ochannel、生成器generator public static void main(String[] args) { // ints(), 生成无限的整数Stream // limit, 用于获取指定数量的流 // forEach,迭代流中的每个数据 Random random = new Random(); random.ints().limit(10).forEach(System.out::println); // map,映射每个元素到对应的结果 // distinct,去重 // sorted,排序 // filter,筛选出符合条件的数据 // collect(Collectors.toList()) 因为前面获得的是Stream,需要转成目标对象 List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); List<Integer> squaresList = numbers.stream(). map(i -> i * i). filter(integer -> integer > 5). distinct(). sorted(). limit(3). collect(Collectors.toList()); System.out.println("map映射结果+distinct去重+sorted排序+limit:" + squaresList); List<Person> people = new ArrayList<Person>(); people.add(new Person("C", 21)); people.add(new Person("T", 20)); people.add(new Person("B", 35)); people.add(new Person("A", 22)); people.sort(Comparator.comparing(Person::getName)); people.forEach(System.out::println); // max,拿到属性最大值的那个对象,最后需要get()获得 // min,拿到属性最大值的那个对象,最后需要get()获得 Person min = people.stream().min(Comparator.comparing(Person::getAge)).get(); Person max = people.stream().max(Comparator.comparing(Person::getAge)).get(); System.out.println("年龄最大:" + max); System.out.println("年龄最小:" + min); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } @Override public String toString() { return this.name + " (" + this.age + ")"; } }