Java8新特性—Stream流示例

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 是一个函数式语言+多核时代综合影响的产物。

Stream示例:

public static void main(String[] args) {
		List<String> list = Arrays.asList("a", "a", "a", "b", "c", "d");

		// 创建流
		Stream<String> stream = list.stream();

		// 中间操作
		// 一、( 刷选和切片)
		// 1.filter排除过滤
		Stream<String> tmp1 = stream.filter((x) -> {
			return x.equals("a");
		});
		// 终止操作
		tmp1.forEach(System.out::println);
		tmp1.close();

		// 2.limit限制数量
		stream = list.stream();
		Stream<String> tmp2 = stream.limit(2);
		// 终止操作
		tmp2.forEach(System.out::println);
		tmp2.close();

		// 3.skip跳过元素
		stream = list.stream();
		Stream<String> tmp3 = stream.skip(3);
		// 终止操作
		tmp3.forEach(System.out::println);
		tmp3.close();

		// 3.distinct去除重复数据
		stream = list.stream();
		Stream<String> tmp4 = stream.distinct();
		// 终止操作
		tmp4.forEach(System.out::println);
		tmp4.close();

		stream.close();

		// 二、映射
		// 1.map——接收Lambda,将元素转换成其他形式的提取发
		// 1.map— 接收一个函数作为参数,该参数会应用到每一个元素上,并将其映射为一个新的元素。
		System.out.println("------------------------------------------");
		Stream<String> tmp5 = list.stream();
		tmp5.map((x) -> x.toUpperCase()).forEach(System.out::println);

		// 2.flatMap——接收一个函数作为参数,将流中的每一个值都转换成一个流,并将所有的流合并成一个流。
		// 如:{{a,b},{c,d},{e,f}}=>{a,b,c,d,e,f}
		// tmp5.flatMap((x) -> {
		// return null;
		// });

		// 3、排序
		System.out.println("------------------------------------------");
		Stream<String> tmp6 = list.stream();
		tmp6.sorted((x, y) -> {
			return x.compareTo(y);
		}).forEach(System.out::println);

		tmp6.close();

		// 4.匹配
		Stream<String> tmp7 = list.stream();
		boolean isMath = tmp7.allMatch((x) -> x.equals("a"));
		tmp7 = list.stream();
		isMath = tmp7.anyMatch((x) -> x.equals("a"));
		System.out.println(isMath);
		tmp7 = list.stream();
		// 总数
		long count = tmp7.count();
		System.out.println(count);

		// 三、规约(可以将流中元素结合,如:累加)
		List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5);
		Stream<Integer> tmp8 = intList.stream();
		int sum = tmp8.reduce(0, (x, y) -> x + y);
		System.out.println(sum);

		// 四、收集(接收一个Collector接口的实现,将stream中的元素汇总成一个类型数据)
		List<Integer> cList = Arrays.asList(1, 2, 3, 4, 5);
		Stream<Integer> tmp9 = cList.stream();
		Set<Integer> set = tmp9.collect(Collectors.toSet());
		set.forEach(System.out::println);
		// 分组,根据条件分组
		Stream<Integer> tmp10 = Arrays.asList(1, 1, 2, 3, 5).stream();
		Map<Integer, List<Integer>> groupMap = tmp10.collect(Collectors.groupingBy((x) -> x));

	
	}


猜你喜欢

转载自blog.csdn.net/vtopqx/article/details/80315313