Java高级特性-001-Java SE 8 的流库

Java SE 8 的流库

        java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。>        Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
        Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
        这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
        元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

java.util.stream能做什么

  1. Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)
  2. java.util.stream 是一个函数式语言+多核时代综合影响的产物
  3. 结合Lambda 表达式,极大的提高编程效率和程序可读性
    在这里插入图片描述

Stream 对集合操作

        流表面上看起来和集合很类似,都可以让我们转换和获取数据。但它们之间存在着显著的差异:

  1. 流并不存储其元素。
  2. 流的操作不会修改其数据源。
  3. 流的操作是尽可能惰性执行的。

List集合

alice.txt在CountLongWords.java文件包名所写的根目录

public class CountLongWords {

	public static void main(String[] args) {
		List<String> words = null;
		String contents = null;
		try {
			contents = new String(Files.readAllBytes(Paths.get("alice.txt")), StandardCharsets.UTF_8);
			words = Arrays.asList(contents.split("\\PL+"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(contents);
		System.out.println(words);
		
		long count = 0;
		for (String w : words) {
			if (w.length() > 4)
				count++;
		}
		System.out.println("1、alice.txt " + count);

		count = words.stream().filter(w -> w.length() > 4).count(); //为集合创建串行流。
		System.out.println("2、alice.txt " + count);
		count = words.parallelStream().filter(w -> w.length() > 4).count(); //为集合创建并行流。
		System.out.println("3、alice.txt " + count);
	}
}

在这里插入图片描述

数组处理

不像集合直接调用,需要先转换成stream
        基本类型流有专门的类型:IntStream、LongStream、DoubleStream
注意:区别对象数组和一般数组,

public class StreamTester {

	public static void main(String[] args) {
		Integer[] sixNums = { 1, 2, 3, 4, 5, 6 };
		Integer[] evens = Stream.of(sixNums).filter(n -> n % 2 == 0).toArray(Integer[]::new);
		Stream.of(evens).forEach(System.out::println);

		int[] nums = { 1, 2, 3, 4, 5, 6 };
		Stream.of(nums).forEach(System.out::println);
		IntStream.of(nums).forEach(System.out::println);
	}
}

在这里插入图片描述

Stream相关函数

在这里插入图片描述

相关文档

Java 8 中的 Streams API 详解
Package java.util.stream
Java8学习之Stream(流)
Java 8中Stream API的这些奇技淫巧!你都Get到了吗?
简洁又快速地处理集合——Java8 Stream(上)
简洁又快速地处理集合——Java8 Stream(下)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章