java8新特性-Stream入门学习心得

  

Java8新特性-Stream入门学习心得

什么是Stream

Stream是Java8引入的一个新特性,它可以使我们更加方便地处理集合中的数据。Stream可以看做是一种高级版本的Iterator,它支持并行处理数据,并且提供了一组非常丰富的操作方法。

Stream的操作

下面介绍一下Stream的常用操作:

创建Stream

Stream有几种不同的创建方式:

  1. 从集合中创建:stream()parallelStream()方法
  2. 从数组中创建:Arrays.stream(T[] array)方法
  3. 从文件中创建:Files.lines(Path path)方法
  4. 通过Stream.of()方法创建一个包含一些元素的stream
  5. 通过Stream.builder()方法创建一个stream builder

中间操作

Stream 提供了很多中间操作(Intermediate Operations),这些操作不会改变 Stream 的数据源,但会返回一个全新的 Stream 对象。

常用的有:

  1. filter(Predicate<T> predicate)方法:根据指定的 Predicate 进行过滤。
  2. map(Function<T, R> mapper)方法:根据提供的函数映射每个元素。把 Stream 中的每一个元素 T 映射为一个新的元素 R,然后将这些新的元素组成一个 Stream
  3. flatMap(Function<T, Stream<R>> mapper):将生成的 Stream 进行合并。
  4. distinct():去重操作。
  5. sorted():排序。
  6. limit(long maxSize):只选择前 n 条数据。

终端操作

Stream 的终止操作(Terminal Operations)执行后,Stream 就被使用"废弃"了,后面的操作会产生 IllegalStateException。

常用的有:

  1. forEach(Consumer<T> action)方法:对每个元素执行操作,无返回值。
  2. count()方法:统计元素个数。
  3. collect(Collector<T,A,R> collector)方法:根据提供的 Collector 实现进行转换成对应的集合。
  4. reduce(BinaryOperator<T> accumulator)方法:对数据进行归约操作。
  5. max()min()方法:获取 Stream 中最大值和最小值。
  6. 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可以大大提高开发效率。

相关文章