一文一起,学习功能强大的Java8新StreamAPI,让集合的操作得心应手

在这里插入图片描述


Stream 实例化


1、方式一:通过集合

Java8 中的 Collection 接口被扩展,提供了两个获取流的方法:

import java.util.ArrayList;

import java.util.stream.Stream;

public class StreamAPITest {

public static void main(String[] args) {

List arrayList = new ArrayList<>();

arrayList.add(“aa”);

arrayList.add(“哈哈”);

arrayList.add(“99”);

//返回一个顺序流,即"aa"->“哈哈”->“99”

Stream stream1 = arrayList.stream();

//返回一个并行流

Stream stream2 = arrayList.parallelStream();

}

}

2、方式二:通过数组

Java8 中的 Arrays 的静态方法 stream() 可以获取数组流:

import java.util.Arrays;

import java.util.stream.Stream;

public class StreamAPITest {

public static void main(String[] args) {

Double[] doubles = {1.1, 2.0, 4.3, 9.9};

Stream stream = Arrays.stream(doubles);

}

}

在这里插入图片描述

3、方式三:通过Stream的of()

调用Stream类静态方法 of(),通过显示值创建一个流,其可接收任意数量的参数:

import java.util.stream.Stream;

public class StreamAPITest {

public static void main(String[] args) {

Double[] doubles = {1.1, 2.0, 4.3, 9.9};

Stream doubles1 = Stream.of(doubles);

Stream<? extends Number> stream = Stream.of(1, 2, 3, 9.9);

}

}

4、方式四:创建无限流

可以使用静态方法 Stream.iterate() 和 Stream.generate() 创建无限流:

import java.util.stream.Stream;

public class StreamAPITest {

public static void main(String[] args) {

// 迭代

// public static Stream iterate(final T seed, final UnaryOperator f)

Stream stream = Stream.iterate(0, x -> x + 2);

stream.limit(10).forEach(System.out::println);

// 生成

// public static Stream generate(Supplier s)

Stream stream1 = Stream.generate(Math::random);

stream1.limit(10).forEach(System.out::println);

}

}


Stream 中间操作


多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理。而在终止操作时一次性全部处理,称为“惰性求值”。

1、筛选与切片

在这里插入图片描述

import java.util.Arrays;

import java.util.List;

import java.util.stream.Stream;

/**

  • @Author: Yeman

  • @Date: 2021-10-05-17:25

  • @Description:

*/

public class StreamAPITest {

public static void main(String[] args) {

List arrayList = Arrays.asList(“aa”,“bb”,“cc”,“aa”);

Stream stream = arrayList.stream();

stream.filter(e -> !e.equals(“aa”)).forEach(System.out :: println); //bb cc

System.out.println(“==========”);

arrayList.stream().limit(2).forEach(System.out :: println); //aa bb

System.out.println(“==========”);

arrayList.stream().skip(2).forEach(System.out :: println); //cc aa

System.out.println(“==========”);

arrayList.stream().distinct().forEach(System.out :: println); //aa bb cc

}

}

2、映射

在这里插入图片描述

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.stream.Stream;

/**

  • @Author: Yeman

  • @Date: 2021-10-05-17:25

  • @Description:

*/

public class StreamAPITest {

public static void main(String[] args) {

List arrayList = Arrays.asList(“aa”,“bb”,“cc”,“aa”);

Stream stream = arrayList.stream();

stream.map(x -> x.toUpperCase()).forEach(System.out :: println); //AA BB CC AA

System.out.println(“====================”);

arrayList.stream().map(StreamAPITest::fromStringToStream).forEach(System.out :: println); //类似于add()

arrayList.stream().flatMap(StreamAPITest::fromStringToStream).forEach(System.out :: println); //类似于addAll()

}

public static Stream fromStringToStream(String str){

ArrayList arrayList = new ArrayList<>();

for (Character c : str.toCharArray()){

arrayList.add©;

}

return arrayList.stream();

}

}

3、排序

在这里插入图片描述

import java.util.Arrays;

import java.util.List;

/**

  • @Author: Yeman

  • @Date: 2021-10-05-17:25

  • @Description:

*/

public class StreamAPITest {

public static void main(String[] args) {

List list = Arrays.asList(2, -9, 0, 22, 6, -1);

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

System.out.println(“===============”);

list.stream().sorted((e1,e2) -> -Integer.compare(e1,e2)).forEach(System.out :: println);

}

}


Stream 终止操作


终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如:List、Integer,甚至是 void 。流进行了终止操作后,不能再次使用。

1、匹配与查找

在这里插入图片描述

在这里插入图片描述

import java.util.Arrays;

import java.util.List;

本次面试答案,以及收集到的大厂必问面试题分享:

字节跳动超高难度三面java程序员面经,大厂的面试都这么变态吗?

ter)

在这里插入图片描述

import java.util.Arrays;

import java.util.List;

本次面试答案,以及收集到的大厂必问面试题分享:

[外链图片转存中…(img-1MGawLea-1714542913673)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值