java8 Stream 使用

在java中新增了一个功能,java.util.stream.Stream。可以实现对集合进行各种高效的聚合操作。功能和使用和rxjs中的Observable很像。

引入

import java.util.stream.Stream;

构造流

// 构造流
Stream<Integer> stream = Stream.of(1, 3, 7, 30, 99);


// arrays
String[] arrayStr = new String[] {"a", "b", "c"};
Stream streamArr = Stream.of(arrayStr);
Stream streamArr2 = Arrays.stream(arrayStr);

// collections
String[] arrayStr = new String[] {"a", "b", "c"};
List<String> list = Arrays.asList(arrayStr);
Stream streamList = list.stream();

常用的操作

1. Intermediate(一个流后面可以零个或多个Intermediate操作,对流进行过滤或映射操作):
map (mapToInt, flatMap)、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 sequential、 unordered

2. Terminal(一个流只能有一个Terminal操作,执行改方法后才开始真正的流的遍历)
forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iterator

3. Short-circuiting(如果流是无限大的,通过该操作可以转为有限的流)
anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 limit

使用

1. map转字母转大写:

String[] arrayStr = new String[] {"a", "b", "c"};
List<String> listStr = Arrays.asList(arrayStr);
Stream<String> streamList = listStr.stream();
streamList.map(String::toUpperCase).forEach(System.out::println);
// 等同于
streamList.map(s -> s.toUpperCase()).forEach(s -> System.out.println(s));

2.filter过滤

Stream<Integer> stream = Stream.of(1, 3, 7, 30, 99);
stream
// 过滤大于18的数字
.filter(num -> num > 10)
// 并输出
.forEach(num -> System.out.println(num));

 

发表评论