• java 11 Stream 加强


    Stream 是 Java 8 中的新特性,Java 9 开始对 Stream 增加了以下 4 个新方法。

    1. 增加单个参数构造方法,可为null

    Stream.ofNullable(null).count(); // 0

    1. 增加 takeWhile 和 dropWhile 方法

    Stream.of(1, 2, 3, 2, 1)

    .takeWhile(n -> n < 3)

    .collect(Collectors.toList()); // [1, 2]

    从开始计算,当 n < 3 时就截止。

    Stream.of(1, 2, 3, 2, 1)

    .dropWhile(n -> n < 3)

    .collect(Collectors.toList()); // [3, 2, 1]

    这个和上面的相反,一旦 n < 3 不成立就开始计算。

    3)iterate重载

    这个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。

    举个例子:

    import java.util.stream.Stream;
    
    import org.junit.Test;
    
    /**
     * 流的处理
     * 1) 创建流
     * 2) 中间操作
     * 3) 终止操作
     */
    
    public class StreamTest {
    	
    	@Test
    	public void test3() {
    		// 流的迭代, 创建流
    		Stream<Integer> stream1 = Stream.iterate(1, t -> (2 * t) + 1);
    		stream1.limit(10).forEach(System.out::println);
    		
    		System.out.println("*************************");
    		// 有限的迭代
    		Stream<Integer> stream2 = Stream.iterate(1, t -> t < 1000, t -> (2 * t) + 1);
    		stream2.forEach(System.out::println);
    	}
    	
    	@Test
    	public void test2() {
    		Stream<Integer> stream1 = Stream.of(3, 9, 20, 22, 40, 7);
    		// 新方法, takeWhile, dropWhile
    		// 从流中一直获取判定器为真的元素, 一旦遇到元素为假, 就终止处理.
    		Stream<Integer> stream2 = stream1.takeWhile(t -> t % 2 != 0);
    		stream2.forEach(System.out::println);
    		
    		System.out.println("**********************");
    		stream1 = Stream.of(3, 9, 20, 22, 40, 7);
    		Stream<Integer> stream3 = stream1.dropWhile(t -> t % 2 != 0);
    		stream3.forEach(System.out::println);
    		
    	}
    	
    	@Test
    	public void test1() {
    		Stream<Integer> stream1 = Stream.of(3, 9, 20, 22, 40);
    		//stream1.forEach(t -> System.out.println(t));
    		stream1.forEach(System.out::println);
    		
    		System.out.println("***********************************");
    		
    		Stream<Object> stream2 = Stream.of(); // 流中没有数据
    		stream2.forEach(System.out::println);
    		
    		System.out.println("***********************************");
    		
    		// 传入null会被解析为是一个数组对象, 会进一步访问它的长度信息
    		//Stream<Object> stream3 = Stream.of(null);
    		//stream3.forEach(System.out::println);
    		
    		// 可以传入 一个null来创建流对象
    		Stream<Object> stream3 = Stream.ofNullable(null);
    		stream3.forEach(System.out::println);
    	}
    }
    
  • 相关阅读:
    共124篇!墨天轮“高可用架构”干货文档分享(含Oracle、MySQL、PG)
    墨天轮沙龙 | 清华乔嘉林:Apache IoTDB,源于清华,建设开源生态之路
    PostgreSQL 15新版本特性解读(含直播问答、PPT资料汇总)
    2022年6月国产数据库大事记墨天轮
    一个Golang的REPL工具
    关闭windows计划重启
    go 数组或切片转为字符串
    解决PyCharm提示Error: Please select a valid Python interpreter
    Linux 下安装 redis
    centos系统和Ubuntu系统命令区别以及常见操作
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/10350871.html
Copyright © 2020-2023  润新知