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...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。