本帖最后由 yqw_gz_java 于 2020-3-19 09:47 编辑
Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物流的构成当我们使用一个流的时候,通常包括三个基本步骤: 获取一个数据源(source)→ 数据转换→执行操作获取想要的结果,每次转换原有 Stream 对象不改变,返回一个新的 Stream 对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道 有多种方式生成 Stream Source - 从 Collection 和数组
- [size=1.0625]Collection.stream()
- Collection.parallelStream()
- Arrays.stream(T array) or Stream.of()从 BufferedReader
- java.io.BufferedReader.lines()
[Java] 纯文本查看 复制代码 int[] buf={1,2,3,4,5,6,7};
IntStream stream = Arrays.stream(buf);
Stream<int[]> buf1 = Stream.of(buf);
List<String> list =new ArrayList();
Stream<String> stream1 = list.stream();
Stream<List<String>> list1 = Stream.of(list);
Stream<String> stringStream = list.parallelStream();
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("/abc")));
Stream<String> lines = bufferedReader.lines();
静态工厂
- java.util.stream.IntStream.range()
- java.nio.file.Files.walk()
[AppleScript] 纯文本查看 复制代码 IntStream range = IntStream.range(2, 30);
Path path = Paths.get("/abc");
Stream<Path> walk = Files.walk(path);
流的构造与转换
[Java] 纯文本查看 复制代码 IntStream.of(new int[]{1, 2, 3}).forEach(System.out::println);
IntStream.range(1, 3).forEach(System.out::println);
IntStream.rangeClosed(1, 3).forEach(System.out::println);
[Java] 纯文本查看 复制代码 // 1. Array
String[] strArray1 = stream.toArray(String[]::new);
// 2. Collection
List<String> list1 = stream.collect(Collectors.toList());
List<String> list2 = stream.collect(Collectors.toCollection(ArrayList::new));
Set set1 = stream.collect(Collectors.toSet());
Stack stack1 = stream.collect(Collectors.toCollection(Stack::new));
// 3. String
String str = stream.collect(Collectors.joining()).toString();
map/flatMap 转大写
[Java] 纯文本查看 复制代码 List<String> wordList=new ArrayList<>();
wordList.add("a");
wordList.add("b");
wordList.add("c");
List<String> collect = wordList.stream().
map(String::toUpperCase).
collect(Collectors.toList());
平方操作
[Java] 纯文本查看 复制代码 //平方
List<Integer> nums = Arrays.asList(1, 2, 3, 4);
List<Integer> squareNums = nums.stream().
map(n -> n * n).
collect(Collectors.toList());
|