📅  最后修改于: 2023-12-03 15:32:04.014000             🧑  作者: Mango
Java流(Stream)是一种用于处理集合数据类型的API。它提供了一种非常简洁、灵活且高效的方式来处理元素集合,它的本质是依托于迭代器实现的数据消费模型。Stream API具有无状态、行为参数化和惰性求值的特性,这些特性使得Stream API用起来非常方便和高效。
Java的Stream API支持三种类型的数据集合类型的流操作:
集合:像List、Set、Queue等Java集合框架能够支持的所有集合类型都可以转换成流。
数组:Java中的数组可以作为Stream API的数据源。
I/O channel:Java NIO中的codecs、buffers、selectors可以与Stream API一起使用。
Stream API提供了许多静态方法帮助我们创建流:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Stream<Integer> stream = list.stream();
String[] array = new String[]{"hello", "world", "stream"};
Stream<String> stream = Arrays.stream(array);
Stream<String> stream = Files.lines(Paths.get("file.txt"));
Stream的中间操作方法可以进一步细分为两种类型,它们分别是:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Stream<Integer> stream = list.stream().filter(i -> i % 2 == 0);
//输出结果为:2, 4, 6, 8, 10
List<String> list = Arrays.asList("hello", "world", "stream");
Stream<String> stream = list.stream().map(String::toUpperCase);
//输出结果为:HELLO, WORLD, STREAM
Stream提供了一种方法来完成我们对集合数据的处理和操作,这种方法被称为Termination操作。这些操作将流处理成另外一个类型的值,或者通过forEach操作来改变流集合数据类型的值。
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = list.stream()
.filter(i -> i % 2 == 0)
.collect(Collectors.toList());
String[] array = new String[]{"hello", "world", "stream"};
Set<String> set = Arrays.stream(array)
.map(String::toUpperCase)
.collect(Collectors.toSet());
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Optional<Integer> result = list.stream().reduce((x, y) -> x + y);
//输出结果为: 55
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
boolean allEven = list.stream().allMatch(i -> i % 2 == 0);
//输出结果为: false
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
boolean anyEven = list.stream().anyMatch(i -> i % 2 == 0);
//输出结果为: true
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
boolean noneMatch = list.stream().noneMatch(i -> i % 2 == 0);
//输出结果为: false
通过Stream API的操作,我们可以大大简化对集合类型数据的过滤、映射、聚合、匹配等处理操作。通过使用Stream API,我们可以提高代码的可读性、可维护性和重复性。