节制,是比仁慈更高尚的品德。|

subeipo

园龄:1个月粉丝:0关注:0

📂Java
🔖Java
2025-01-19 18:24阅读: 13评论: 0推荐: 0

Java初学者笔记-06、Stream流

什么是Stream流

JDK8开始新增的一套API,可以用于链式操作集合或者数组的数据。
优势: Stream流大量的结合了Lambda的语法风格来编程,功能强大,性能高效,代码简洁,可读性好。

list.stream().filter(s -> s.startswith("张")).filter(s -> s.Length() == 3).collect(Collectors.toList());

使用Stream流

  1. 获取Stream流。(开启)
  2. 调用流水线的各种操作。(处理)
  3. 获取处理的结果。(终结)

获取Stream流(开启)

// 集合
// default Stream <E> stream()
List<String> list = new ArrayList<>();
list.stream();
// ===============
// 数组
// public static <T> Stream<T> stream(T[] array)
// public static <T> Stream<T> of(T... values)
String[] names = {"1","2","3"};
Arrays.stream(names);
// 或者
Stream.of(names);

扩展:可变参数

public static <T> Stream<T> of(T... values)

  1. 三个点代表可变参数,数据类型…参数名称,可以匹配多个参数或者一个数组。
  2. 可变参数在形参列表中只能有一个,且可变参数必须放在形参列表的最后面。
  3. 可变参数对内实际上就是一个数组。下面中nums就是数组。
public static void sum(int age, int...nums){
System.out.println(nums.Length);
System.out.println(Arrays.toString(nums));
}
  1. 可以不传数据给可变参数;也可以传一个或者同时传多个数据给它。常常用它来灵活地接收数据。

Stream流的常用中间方法

中间方法:用完方法返回一个新流,继续链式编程。

Stream提供的常用中间方法 说明
Stream filter(Predicate<? super T> predicate) 用于对流中的数据进行过滤
Stream sorted() 对元素进行升序排序
Stream sorted(Comparator<? super T> comparator) 按照指定规则排序
Stream limit(long maxSize) 获取前几个元素
Stream skip(long n) 跳过前几个元素
Stream distinct() 去除流中重复的元素
Stream map(Function<? super T,? extends R> mapper) 对元素进行加工,并返回对应的新流
static Stream concat(Stream a, Stream b) 合并a和b两个流为一个流
其中,map方法是映射加工方法,把流上原来的数据拿出来变成新数据又放到流上去。
scores.stream().sorted().forEach(System.out::println);
scores.stream().sorted((s1,s2) -> Double.compare(s2,s1)).forEach(System.out::println);
scores.stream().sorted((s1, s2) -> Double.compare(s2, s1)).limit(2).forEach(System.out::println);// 取前两名
scores.stream().sorted((s1, s2) -> Double.compare(s2, s1)).skip(2);// 跳过前两名
scores.stream().map(s -> "加10分后:" + (s +10)).forEach(System.out::println);// 每人加10分

Stream流的常用终结方法

终结方法指的是调用完成后,不会返回新Stream了,没法继续使用流了。
流只能用一次!终结后就不能用了。

Stream提供的常用终结方法 说明
void forEach(Consumer action) 对此流运算后的元素执行遍历
long count() 统计此流运算后的元素个数
Optional max(Comparator<? super T> comparator) 获取此流运算后的最大值元素
Optional min(Comparator<? super T> comparator) 获取此流运算后的最小值元素

注意:max,min返回的是Optional对象,需要使用.get()获取这个对象。

Stream流的收集

就是把Stream流操作后的结果转回到集合或者数组中去返回。

list.stream().filter(s -> s.startsWith("3k")).collect(Collector.toList());
Stream提供的常用终结方法 说明
R collect(Collector collector) 把流处理后的结果收集到一个指定的集合中去
Object[] toArray() 把流处理后的结果收集到一个数组中去
Collectors工具类提供了具体的收集方式 说明
public static Collector tolist() 把元素收集到List集合中
public static Collector toSet() 把元素收集到Set集合中
public static Collector toMap(Function keyMapper , Function valueMapper) 把元素收集到Map集合中

本文作者:subeipo

本文链接:https://www.cnblogs.com/subeipo/p/18679782/java-chu-xue-zhe-bi-ji06stream-liu

版权声明:本作品采用署名—非商业性使用—相同方式共享 4.0 协议许可协议进行许可。

posted @   subeipo  阅读(13)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起