参考:https://blog.csdn.net/y_k_y/article/details/84633001
一、概述
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。
二、分类
stream操作分类 | ||
中间操作 | 无状态(Statusless) | filter() map() mapToInt() mapToLong() mapToDouble()flatMap() flatMapToInt()flatMapToLong() flatMapToDouble()unordered() pee() |
有状态(Statusful) | distinct() sorted() limit() skip() | |
结束操作 | 非短路操作 | foreach() forEachOrdered() toArray() toList() collect() max() min() count() |
短路操作 | anyMatch() allMatch() noneMatch()findFirst() findAny() |
解释:
无状态:指元素的处理不受之前元素的影响;
有状态:指该操作只有拿到所有元素之后才能继续下去。
非短路操作:指必须处理所有元素才能得到最终结果;
短路操作:指遇到某些符合条件的元素就可以得到最终结果,如 A || B,只要A为true,则无需判断B的结果
三、具体用法
List<String> list=new ArrayList<>();// .stream()获取一个顺序流Stream<String> stream=list.stream();// .parallelStream()获取一个并行流Stream<String> parallelStream=list.parallelStream();
String[] arr = {"1", "3", "2", "5", "1" };Stream<String> stream1=Arrays.stream(arr);
Stream<Integer> stream = Stream.of(1,2,3,4,5,6); Stream<Integer> stream2 = Stream.iterate(0, (x) -> x 2).limit(6);stream2.forEach(System.out::println); // 0 2 4 6 8 10 Stream<Double> stream3 = Stream.generate(Math::random).limit(2);stream3.forEach(System.out::println);
BufferedReader reader = new BufferedReader(new FileReader("F:\\test_stream.txt"));Stream<String> lineStream = reader.lines();lineStream.forEach(System.out::println);
Pattern pattern = Pattern.compile(",");Stream<String> stringStream = pattern.splitAsStream("a,b,c,d");stringStream.forEach(System.out::println);
Integer[] arr = {6, 3, 7, 3, 6,11,9, 10}; List<Integer> list = Arrays.asList(arr); List<Integer> newlist = new ArrayList<>(list); List<Integer> sList = newlist.stream() .filter(ele -> ele>5) // {6,7,6,11,9,10} .distinct() // {6,7,11,9,10} .sorted() // {6,7,9,10,11}
# 输出元素对应的平方数 Integer[] arr = {1,2,3,4,5}; List<Integer> list = Arrays.asList(arr); List<Integer> newlist = new ArrayList<>(list); Stream<Integer> stream= newlist.stream() .map(i ->i*i); stream.forEach(System.out::println); // {1,3,9,16,25}
来源:https://www.icode9.com/content-1-657251.html
联系客服