Java8新特性-Stream入门学习心得
什么是Stream
Stream是Java8引入的一个新特性,它可以使我们更加方便地处理集合中的数据。Stream可以看做是一种高级版本的Iterator,它支持并行处理数据,并且提供了一组非常丰富的操作方法。
Stream的操作
下面介绍一下Stream的常用操作:
创建Stream
Stream有几种不同的创建方式:
- 从集合中创建:
stream()
和parallelStream()
方法 - 从数组中创建:
Arrays.stream(T[] array)
方法 - 从文件中创建:
Files.lines(Path path)
方法 - 通过Stream.of()方法创建一个包含一些元素的stream
- 通过Stream.builder()方法创建一个stream builder
中间操作
Stream 提供了很多中间操作(Intermediate Operations),这些操作不会改变 Stream 的数据源,但会返回一个全新的 Stream 对象。
常用的有:
filter(Predicate<T> predicate)
方法:根据指定的 Predicate 进行过滤。map(Function<T, R> mapper)
方法:根据提供的函数映射每个元素。把 Stream 中的每一个元素 T 映射为一个新的元素 R,然后将这些新的元素组成一个 Stream。 flatMap(Function<T, Stream<R>> mapper)
:将生成的 Stream 进行合并。distinct()
:去重操作。sorted()
:排序。limit(long maxSize)
:只选择前 n 条数据。
终端操作
Stream 的终止操作(Terminal Operations)执行后,Stream 就被使用"废弃"了,后面的操作会产生 IllegalStateException。
常用的有:
forEach(Consumer<T> action)
方法:对每个元素执行操作,无返回值。count()
方法:统计元素个数。collect(Collector<T,A,R> collector)
方法:根据提供的 Collector 实现进行转换成对应的集合。reduce(BinaryOperator<T> accumulator)
方法:对数据进行归约操作。max()
和min()
方法:获取 Stream 中最大值和最小值。findFirst()
和findAny()
方法:获取第一个和任意一个元素。
示例说明
下面举两个简单的例子,说明Stream的用法。
例子1:筛选成年龄大于等于18岁的人
List<Person> personList = Arrays.asList(
new Person("张三", 15),
new Person("李四", 18),
new Person("王五", 21),
new Person("赵六", 25)
);
List<Person> adultList = personList.stream()
.filter(person -> person.getAge() >= 18)
.collect(Collectors.toList());
上面的代码中,我们通过filter方法从personList中筛选年龄大于等于18岁的人,然后将这些人组成一个新的List。
例子2:对数字进行平方计算
List<Integer> numberList = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> squareList = numberList.stream()
.map(number -> number * number)
.collect(Collectors.toList());
上面的代码中,我们通过map方法将numberList中的每个数平方,然后将这些平方的数组成一个新的List。
总结
Stream的引入使得我们对集合中的数据处理变得更加方便,并且代码更加简洁易懂。熟练掌握Stream API可以大大提高开发效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java8新特性-Stream入门学习心得 - Python技术站