在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));