Stream API
Stream API 是 Java8 的新特性,通常用于对集合进行一些操作,可以帮助开发者写出更高效、整洁的代码。
一、Stream 流的创建
1、通过已有的集合来创建流,这种方式使用的比较多
List<String> strings = Arrays.asList("hushucheng", "hufanqie", "hututu", "marong", "marongrong");
Stream<String> stream = strings.stream();
2、使用 stream 来创建
Stream<String> stream = Stream.of("hushucheng", "hufanqie", "hututu", "marong", "marongrong");
二、中间操作
1、filter
用法如下:
List<String> strings = Arrays.asList("hushucheng","","hufanqie","hututu","marong","marongrong");
strings.stream().filter(string -> !string.isEmpty()).forEach(System.out::println);
在例子中,过滤了空字符串。
2、map
用法如下:
List<String> strings = Arrays.asList("hushucheng","hufanqie", "hututu", "marong", "marongrong");
strings.stream().map(string -> string.toUpperCase()).forEach(System.out::println);
在例子中,将单词全部映射为大写
3、limit
用法如下:
List<String> strings = Arrays.asList("hushucheng","hufanqie", "hututu", "marong", "marongrong");
strings.stream().map(string -> string.toUpperCase()).limit(4).forEach(System.out::println);
用来限制返回的个数
4、skip
用法类似 limit,用来跳过若干个数。
5、sorted
用于对流进行排序。
List<Integer> strings = Arrays.asList(1, 3, 3, 2, 5, 4);
strings.stream().sorted().forEach(System.out::println);
6、distinct
用于去重。用法略。
三、最终操作
1、forEach
用于迭代流中的每个元素,并执行相应的操作。比如前面的例子中都用到了。
2、collect
将流中的元素累积成一个汇总结果。
List<Integer> strings = Arrays.asList(1, 3, 3, 2, 5, 4);
strings = strings.stream().sorted().collect(Collectors.toList());
3、count
统计流中元素个数。
Optional 类
Optional 类也是 Java8 的新特性,用于有效解决 NPE 问题。
一、Optional 对象的创建
1、empty方法创建一个空对象
Optional<String> s1 = Optional.empty();
2、of方法可以创建一个非空对象
Optional<String> s2 = Optional.of("marong");
3、ofNullable 方 法可以创建一个可以为空的对象
Optional<String> s3 = Optional.ofNullable("marongrong");
二、常用方法
1、ifPresent 和 isPresent
(1) 调用 ifPresent 方法,则对象不为空执行相关操作。
(2) 调用 isPresent 方法可以判断对象是否为空。
2、orElseorElseThroworElseGet
(1) orElse
System.out.println(s1.orElse("marong").equals("marong")); \\true
System.out.println(s3.orElse("marong").equals("marongrong")); \\true
(2) orElseGet
与 orElse 的功能一样,不过接受一个函数式接口来生成对象
System.out.println(s1.orElseGet(String::new).equals(""));
System.out.println(s3.orElseGet(() -> "marongrong").equals("marongrong"));
(3) orElseThrow
orElseThrow 为空则抛出异常
s1.orElseThrow(IllegalStateException::new);
3、filter
与 Stream 使用类似
4、map
与 stream 使用类似
5、flatmap
这是一种级联的方式,能够解决 map 方式的 optional 嵌套问题。
http://www.hollischuang.com/w…