获取流
集合.stream() 集合.parallelStream()Arrays.stream(...)Stream.of(...)Stream.iterate(...).limit(...).forEach(...)Stream.generate(...).limit(...).forEach(...) 操作流
筛选切片映射排序 生成结果
判断获取迭代转换收集
获取流 集合.stream() 集合.parallelStream()Collection的方法,可以由集合获取流。
Listlist = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); Stream stream = list.stream(); stream.forEach(System.out::println);
parallelStream是多个线程同时操作。
Arrays.stream(…)由数组获取流。
String[] arr = {"A", "B", "C"};
Stream stream = Arrays.stream(arr);
stream.forEach(System.out::println);
Stream.of(…)
由一些数据获取流
StreamStream.iterate(…).limit(…).forEach(…)stream = Stream.of("A", "B", "C"); stream.forEach(System.out::println);
迭代产生无限流
Stream.iterate(1, x -> x + 1) .limit(10) .forEach(System.out::println);Stream.generate(…).limit(…).forEach(…)
生成器产生无限流
Stream.generate(() -> new Random().nextInt(10)) .limit(10) .forEach(System.out::println);操作流 筛选切片
排除:filter
按条件筛选元素
Stream.generate(() -> new Random().nextInt(10)) .limit(20) .filter(x -> x >= 5) .forEach(System.out::println);
截断:limit
限制数量,超过的部分舍弃。
Stream.generate(() -> new Random().nextInt(10)) .limit(20) .forEach(System.out::println);
跳过:skip
去除前面一些元素。
Stream.generate(() -> new Random().nextInt(10)) .limit(20) .skip(10) .forEach(System.out::println);
去重:distinct
去除重复的元素
Stream.generate(() -> new Random().nextInt(10)) .limit(20) .distinct() .forEach(System.out::println);映射
加工:map
对每个元素进行一次加工,可以得到新的元素流
@Test
public void fun1() {
Stream.generate(() -> new Random().nextInt(10))
.limit(20)
.map(x -> new Integer[]{x, x + 1, x + 2})
.forEach(HelloTest::showArray);
}
public static void showArray(Integer[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
if (i != arr.length - 1) {
System.out.print(",");
}
}
System.out.println("]");
}
流中流:flatmap
专用于元素是集合的情况,会对其中的元素进行加工,得到新的元素流。
Stream.generate(() -> new Random().nextInt(10))
.limit(20)
.map(x -> new Integer[]{x, x + 1, x + 2})
.flatMap(Stream::of)
.forEach(System.out::println);
排序
简单排序
Stream.generate(() -> new Random().nextInt(10)) .limit(20) .sorted() .forEach(System.out::println);
自定义排序
Stream.generate(() -> new Random().nextInt(10)) .limit(20) .sorted((x, y) -> y - x) .forEach(System.out::println);生成结果 判断
是否全部符合
boolean b = Stream.generate(() -> new Random().nextInt(10)) .limit(20) .allMatch(x -> x < 9); System.out.println(b);
是否有符合的
boolean b = Stream.generate(() -> new Random().nextInt(10)) .limit(20) .anyMatch(x -> x < 9); System.out.println(b);
是否没有符合的
boolean b = Stream.generate(() -> new Random().nextInt(10)) .limit(20) .noneMatch(x -> x < 9); System.out.println(b);获取
第一个元素
Optionalfirst = Stream.generate(() -> new Random().nextInt(10)) .limit(20) .findFirst(); System.out.println(first.get());
随机的一个元素
Optionalfirst = Stream.generate(() -> new Random().nextInt(10)) .limit(20) .findAny(); System.out.println(first.get());
总数量
long count = Stream.generate(() -> new Random().nextInt(10)) .limit(20) .count(); System.out.println(count);
最大值
Optionalmin = Stream.generate(() -> new Random().nextInt(10)) .limit(20) .max((x, y) -> x - y); System.out.println(min.get());
最小值
Optional迭代min = Stream.generate(() -> new Random().nextInt(10)) .limit(20) .min((x, y) -> x - y); System.out.println(min.get());
遍历所有元素
Stream.generate(() -> new Random().nextInt(10)) .limit(20) .forEach(System.out::println);转换
所有值合起来变成一个值
Integer reduce = Stream.generate(() -> new Random().nextInt(10)) .limit(20) .reduce(0, (x, y) -> x + y); System.out.println(reduce);收集
所有值合起来变成一个集合
Lists = Stream.generate(() -> new Random().nextInt(10)) .limit(20) .collect(Collectors.toList()); System.out.println(s);
Collectors常用接口
toList 转List toSet 转Set toCollection(HashSet::new) 转Set counting() 计算数量 averagingDouble 平均值 summingDouble 求和 maxBy 最大值 minBy 最小值 groupingBy 分组Map partitioningBy 分组 joining 字符串拼接



