Java之Steam() API 常用方法使用

Stream用的时候老是忘记,特此记录一下。

Stream是Java 8引入的一组 API,它提供了一种新的并行处理集合数据的方式,可以让开发者更加方便、高效地对集合进行操作。

Stream用法:

filter(Predicate<T> predicate):根据指定的条件筛选元素。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); 
List<Integer> result = list.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
// 输出:[2, 4]

map(Function<T, R> mapper):将元素转换为另一种类型。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); 
List<String> result = list.stream().map(n -> "Number: " + n).collect(Collectors.toList()); 
// 输出:["Number: 1", "Number: 2", "Number: 3", "Number: 4", "Number: 5"]

flatMap(Function<T, Stream<R>> mapper):将流中的每个元素转换为一个流,然后将所有流合并为一个流。

List<List<Integer>> lists = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4, 5));
List<Integer> result = lists.stream().flatMap(list -> list.stream()).collect(Collectors.toList());
// 输出:[1, 2, 3, 4, 5]

distinct():去除流中重复的元素。

List<Integer> list = Arrays.asList(1, 2, 3, 2, 4, 1, 5);
List<Integer> result = list.stream().distinct().collect(Collectors.toList());
// 输出:[1, 2, 3, 4, 5]

sorted():对流中元素进行排序。

List<Integer> list = Arrays.asList(5, 3, 1, 2, 4);
List<Integer> result = list.stream().sorted().collect(Collectors.toList());
// 输出:[1, 2, 3, 4, 5]

peek(Consumer<T> action):对流中的元素执行指定的操作。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = list.stream().peek(n -> System.out.println("Processing element: " + n)).collect(Collectors.toList());
// 输出:Processing element: 1 Processing element: 2 Processing element: 3 Processing element: 4 Processing element: 5

limit(long maxSize):截取流中的前N个元素。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = list.stream().limit(3).collect(Collectors.toList());
// 输出:[1, 2, 3]

skip(long n):跳过流中的前N个元素。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = list.stream().skip(3).collect(Collectors.toList());
// 输出:[4, 5]

forEach(Consumer<T> action):对流中的每个元素执行指定的操作。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream().forEach(n -> System.out.println(n));
// 输出:1 2 3 4 5

collect(Collector<T, A, R> collector):将流中的元素收集到一个容器中。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> result = list.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
// 输出:[2, 4]

count():返回流中的元素个数。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
long count = list.stream().count();
// 输出:5

reduce(T identity, BinaryOperator<T> accumulator):将流中的元素逐个与初始值进行操作,返回最终结果。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int sum = list.stream().reduce(0, (a, b) -> a + b);
// 输出:15

findFirst()findAny():返回流中的第一个元素或任意一个元素。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> first = list.stream().findFirst();
Optional<Integer> any = list.stream().findAny();
// 输出:1

max()min():返回流中的最大元素或最小元素。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> max = list.stream().max(Integer::compareTo);
Optional<Integer> min = list.stream().min(Integer::compareTo);
// 输出:5 1

allMatch(Predicate<T> predicate)anyMatch(Predicate<T> predicate)noneMatch(Predicate<T> predicate):分别返回流中所有元素是否满足指定条件、是否至少有一个元素满足指定条件、是否没有元素满足指定条件。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
boolean allMatch = list.stream().allMatch(n -> n > 0);
boolean anyMatch = list.stream().anyMatch(n -> n % 2 == 0);
boolean noneMatch = list.stream().noneMatch(n -> n > 5);
// 输出:true true false

Stream 是基于管道(Pipe)和过滤器(Filter)的模式,通过对数据源执行一系列中间操作(Intermediate Operations)和终端操作(Terminal Operations)来完成对数据的处理。

利用 Stream API,我们可以在不改变原有数据结构的前提下,方便地进行数据的筛选、排序、映射、聚合等操作,并且这些操作可以串行或并行地执行,以提高计算效率。

总结常用 API

  • filter(按照条件过滤需要数据)
  • max(取出流中的最大值)
  • min(取出流中的最小值)
  • count(取出流中的数量)
  • sum(取出流中数据的和)
  • average(取出流中数据的平均值)
  • distinct(将流中的数据去重)
  • sorted(自然排序,默认为升序,可以设置为升序排序或者降序排序)
  • limit,skip (限制和跳过:可以将流数据的部分截取,可用于后台的分页场景)
  • map(映射转换)
  • collect,toList(不可以对集合去重)
  • collect, toSet(可以集合去重)
  • toArray(将流数据转为数组)
  • mapToInt,distinct(将流数据转成IntStream,并去重)
  • reduce 求和
  • reduce 求最大值
  • reduce 求最小值
  • reduce 求乘积
  • findFirst(查找第一个元素)
  • findAny(任意查找一个元素)
  • allMatch(判断是否全部满足条件,全部满足返回 true,否则返回false)
  • anyMatch(判断是否有一个满足条件,只要有一个满足就返回 true,否则都不满足返回false)
  • noneMatch(判断是否都不满足条件,都不满足返回true,否则返回false)
  • flatmap(扁平化流处理)

本文参考引用:

Java中stream是什么及如何使用

Java Steam 常用 API

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值