[Java] JDK11
2. JDK11 语法
2.0 var
var 类型推断
@Test
public void t1() {
Consumer<String> c1 = t -> System.out.println(t.toUpperCase());
Consumer<String> c2 = (var t) -> System.out.println(t.toUpperCase());
c2.accept("a");
// 错误的形式: 必须要有类型, 可以加上var
// Consumer<String> c3 = (@Deprecated t) -> System.out.println(t.toUpperCase());
// 正确的形式:
Consumer<String> c3 = (@Deprecated var t) -> System.out.println(t.toUpperCase());
}
2.1 Stream
2.1.1 Stream.ofNullable 对null的过滤
@Test
public void t1(){
// 传入null会被解析成一个数组对象,会进一步访问他的长度信息,故不安全,null时会抛异常
Stream<Object> s1 = Stream.of(null);
s1.forEach(System.out::println);
// 传入一个null,使用流对象进行检测,如果是null,则过滤掉
Stream<Object> s2 = Stream.ofNullable(null);
s2.forEach(System.out::println);
}
2.1.2 takeWhile() 与 dropWhile()
@Test
public void t2(){
Stream<Integer> stream1 = Stream.of(1, 1, 3, 2, 2, 3, 4, 5);
// takeWhile:一直拿(条件为True),拿不到(条件为False)则终止
// 取奇数 1 1 3,2不是奇数,所以到2就停止了
Stream<Integer> stream2 = stream1.takeWhile(t -> t % 2 != 0);
stream2.forEach(i->log.info("no1:" + i));
log.info("---");
// dropWhile:一直抛弃(条件为True),(条件为False)不再抛弃才开始拿
// 1 1 3 都是奇数,都要抛弃,2不是奇数,从2开始一直拿
stream1 = Stream.of(1, 1, 3, 2, 2, 3, 4, 5);
stream2 = stream1.dropWhile(t -> t % 2 != 0);
stream2.forEach(i->log.info("no2:" + i));
}
输出:
01:09:00.924 [main] INFO com.lee.jdk11.study.sgg.StreamTest - no1:1
01:09:00.926 [main] INFO com.lee.jdk11.study.sgg.StreamTest - no1:1
01:09:00.926 [main] INFO com.lee.jdk11.study.sgg.StreamTest - no1:3
01:09:00.926 [main] INFO com.lee.jdk11.study.sgg.StreamTest - ---
01:09:00.928 [main] INFO com.lee.jdk11.study.sgg.StreamTest - no2:2
01:09:00.928 [main] INFO com.lee.jdk11.study.sgg.StreamTest - no2:2
01:09:00.928 [main] INFO com.lee.jdk11.study.sgg.StreamTest - no2:3
01:09:00.929 [main] INFO com.lee.jdk11.study.sgg.StreamTest - no2:4
01:09:00.930 [main] INFO com.lee.jdk11.study.sgg.StreamTest - no2:5
本作品采用《CC 协议》,转载必须注明作者和本文链接