【java8的特性-3】Stream流!

一、Java8中的stream流 

(一)、概念 

Java 8中的Stream是一种处理集合数据的方式,它可以被用来过滤、排序、映射等操作。Stream可以让我们以一种声明性的方式来处理数据集合,而不是以传统的命令式方式。与集合不同的是,Stream并不直接操作数据集合,而是生成一个新的Stream或者在数据集合上执行一些操作返回一个新的Stream

(二)、Stream的优点

  • 声明性:使用Stream可以更加清晰和简洁地表达我们对集合数据的操作。
  • 可重用:Stream可以被重复使用,也可以被组合成复杂的操作序列。
  • 并行处理:Stream可以支持并行处理,大大提高处理效率。

(三)、Stream的操作可以分为两类

  • 中间操作(Intermediate Operations):对数据集合进行操作并返回一个新的Stream,例如过滤和映射。
  • 终止操作(Terminal Operations):对数据集合进行操作并返回一个结果,例如计算总和和计算平均数。

二、Stream流的常用方法 

(一)、Filter过滤 

 filter方法需要一个Predicate类型的参数,Predicate是一个函数接口,用于判断一个对象是否满足某个条件。filter方法会将集合中的每一个元素都传入Predicate中,如果Predicate返回true,则保留该元素,否则移除该元素。

(二)、Sorted排序

Stream流中的sorted()方法可以对元素进行排序操作。该方法有两种重载形式:sorted()和sorted(Comparator<T> comparator)。其中,前者将默认按照自然顺序排序,后者可以按照指定的比较器进行排序。

需要注意的是,sorted()方法并不会改变原来的元素顺序,它会返回一个新的有序的流。如果需要将排序结果保存下来,可以使用collect()方法将元素收集到一个List中。

(三)、Map映射

Stream流中的Map方法可以将一个Stream中的每个元素都映射成另外一个元素,映射后的结果会放到一个新的Stream中返回。

map( Function<? super T, ? extends R> mapper):将原Stream中的元素按照Function映射转换成另一个元素。

(四)、Match匹配

match() 方法有三个方法重载,分别为:

  • allMatch(Predicate<? super T> predicate)
  • anyMatch(Predicate<? super T> predicate)
  • noneMatch(Predicate<? super T> predicate)

这三个方法都接收一个 Predicate 参数,它表示一个函数接口,用于对流中的元素进行匹配。这个函数接口中有一个唯一的抽象方法 test(T t),用于判断流中的元素是否符合匹配条件。

  • allMatch(Predicate<? super T> predicate) 方法判断流中的所有元素是否都符合给定的匹配条件。如果流为空,则返回 true
  • anyMatch(Predicate<? super T> predicate) 方法判断流中是否存在任意一个元素符合给定的匹配条件。如果流为空,则返回 false
  • noneMatch(Predicate<? super T> predicate) 方法判断流中是否所有元素都不符合给定的匹配条件。如果流为空,则返回 true

(五)、Count计数

 Stream流的Count方法用于计算Stream流中的元素个数。它返回一个long类型的值,代表Stream流中元素的个数。

(六)、Collect收集

在流中,有一组与Collectors类相关的方法,可以用来收集流中的元素并将它们转换为不同的数据结构。下面列出了一些常用的Collectors方法:

toList():将流中的元素转换为列表。

List<String> names = people.stream()
    .map(Person::getName)
    .collect(Collectors.toList());

toSet():将流中的元素转换为集合。

Set<String> uniqueNames = people.stream()
    .map(Person::getName)
    .collect(Collectors.toSet());

toMap():将流中的元素转换为Map。

Map<String, Integer> nameToAgeMap = people.stream()
    .collect(Collectors.toMap(Person::getName, Person::getAge));

这些方法都返回一个收集器对象,可以通过调用它们的静态方法来使用。Collectors类中还有许多其他的方法,可以根据需要选择使用。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值