Stream流

Stream流

1. 什么是Stream?

Java8中两个最为重要特性:第一个的是Lambda表达式,另一个是Stream API。

StreamAPI它位于 java.util.stream 包中,StreamAPI帮助我们更好地对数据进行集合操作,它本质就是 对数据的操作进行流水线式处理,也可以理解为一个更加高级的迭代器,主要作用是遍历其中每一个元素。

简而言之,StreamAP提供了一种高效且易于使用的处理数据方式

2. Stream特点:

1、Stream自己不会存储数据。

2、Stream不会改变源对象。相反,它们会返回一个持有结果的新Stream对象

3、Stream操作时延迟执行的。这就意味着它们等到有结果时候才会执行。

3. Stream操作的三个步骤 

1、创建Stream:一个数据源(例如:set 、list),获取一个流。

2、中间操作:一个中间操作连接,对数据源的数据进行处理。

3、终止操作:一个终止操作,执行中间操作连,产生结果。

4. Stream创建可以通过三种方式创建。

1. 通过 java.util.Collection.stream() 方法用集合创建流

2. 使用 java.util.Arrays.stream(T[ ] array) 方法用数组创建流

3. 使用 Stream 的静态方法: of()iterate()generate()

 //1.通过 `java.util.Collection.stream()` 方法用集合创建流
 List<String> list = Arrays.asList("d","a", "b", "c");
 Stream<String> streamList = list.stream();
 System.out.println("###############顺序流##############");

 streamList.forEach(System.out::print);
 System.out.println();
 System.out.println("###############并行流##############");

 // 创建一个并行流
 Stream<String> parallelStream = list.parallelStream();
 parallelStream.forEach(System.out::print);
 System.out.println();

 //2.使用`java.util.Arrays.stream(T[] array)`方法用数组创建流
 int[] array={1,3,5,6,8};
 IntStream streamint = Arrays.stream(array);
 streamint.forEach(System.out::print);
 System.out.println();

 //3.使用`Stream`的静态方法:`of()、iterate()、generate()
 Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
 stream.forEach(System.out::print);
 System.out.println();
 Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 3).limit(4);
 stream2.forEach(System.out::print);
 System.out.println();
 Stream<Double> stream3 = Stream.generate(Math::random).limit(3);
 stream3.forEach(System.out::print);
 System.out.println();

5. 中间操作 

用下面这个集合来举例:

public static void main(String[] args) {
 ArrayList<String> list = new ArrayList<>();
 Collections.addAll(list, "张无忌", "周芷若", "赵敏", "张强", "张三丰","张无
忌");
 }

(1).limit(n) 从list中取出n个元素

list.stream().limit(2).forEach(System.out::println);

(2).skip(n) 从list第n个元素开始,取出所有元素

list.stream().skip(3).forEach(System.out::println);

(3).distinct() 去除重复

list.stream().distinct().forEach(System.out::println);

(4).filter(Predicate predicate) 筛选条件括号中的内容为一个断言型函数式接口,其中的T为当前集合中元素的类型。

public static void main(String[] args) {
 List<Person> personList = new ArrayList<>();
 personList.add(new Person("欧阳雪",18,"中国",'F'));
 personList.add(new Person("Tom",24,"美国",'M'));
 personList.add(new Person("Harley",22,"英国",'F'));
 personList.add(new Person("向天笑",20,"中国",'M'));
 personList.add(new Person("李康",22,"中国",'M'));
 personList.add(new Person("小梅",20,"中国",'F'));
 personList.add(new Person("何雪",21,"中国",'F'));
 personList.add(new Person("李康",22,"中国",'M'));
 }

找出年龄大于20的人并打印输出:

personList.stream()
 .filter((person)->person.getAge()>20)
 .forEach(System.out::println);

(5).map(Function mapper ) 将元素转换成其他形式或提取信息。 

打印出集合中所有人的年龄:

personList.stream()
 .map((person -> person.getAge()))
 .forEach(System.out::println);

 (6).sorted() 对元素进行排序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愚人钊呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值