您当前的位置:首页 > 互联网教程

JAVA1.8Stream如何使用

发布时间:2025-05-24 10:15:12    发布人:远客网络

JAVA1.8Stream如何使用

一、JAVA1.8Stream如何使用

这个叫stream流运算,是目前市场上比较流行的用法,效率会比较高,举几个例子吧:

1、collect(Collectors.toList())

将流转换为list。还有toSet(),toMap()等。

是不是很方便,一个方法让对象们变成list集合。

顾名思义,起过滤筛选的作用。这个也是常用的,可以过滤集合里面的值,非常实用,假如你的List里面筛选身高不足180的数据,就能这么用。

转换功能,例如将student对象转换为String对象,获取student的名字。

这几个是我觉得在公司比较实用的,可以多练习,然后在看比较深的steamAPI。纯手打望采纳。

二、用Java 8 增加的 Stream API 能实现哪些优雅的算法

1、Java 8引入了全新的Stream API。这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同。

2、Stream API引入的目的在于弥补Java函数式编程的缺陷。对于很多支持函数式编程的语言,map()、reduce()基本上都内置到语言的标准库中了,不过,Java 8的Stream API总体来讲仍然是非常完善和强大,足以用很少的代码完成许多复杂的功能。

3、创建一个Stream有很多方法,最简单的方法是把一个Collection变成Stream。我们来看最基本的几个操作:

4、public static void main(String[] args){

5、List<Integer> numbers= Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

6、Stream<Integer> stream= numbers.stream();

7、}).forEach(System.out::println);

8、集合类新增的stream()方法用于把一个集合变成Stream,然后,通过filter()、map()等实现Stream的变换。Stream还有一个forEach()来完成每个元素的迭代。

9、为什么不在集合类实现这些操作,而是定义了全新的Stream API?Oracle官方给出了几个重要原因:

10、一是集合类持有的所有元素都是存储在内存中的,非常巨大的集合类会占用大量的内存,而Stream的元素却是在访问的时候才被计算出来,这种“延迟计算”的特性有点类似Clojure的lazy-seq,占用内存很少。

11、二是集合类的迭代逻辑是调用者负责,通常是for循环,而Stream的迭代是隐含在对Stream的各种操作中,例如map()。

12、要理解“延迟计算”,不妨创建一个无穷大小的Stream。

13、如果要表示自然数集合,显然用集合类是不可能实现的,因为自然数有无穷多个。但是Stream可以做到。

14、自然数集合的规则非常简单,每个元素都是前一个元素的值+1,因此,自然数发生器用代码实现如下:

15、class NaturalSupplier implements Supplier<Long>{

16、反复调用get(),将得到一个无穷数列,利用这个Supplier,可以创建一个无穷的Stream:

17、public static void main(String[] args){

18、Stream<Long> natural= Stream.generate(new NaturalSupplier());

19、}).limit(10).forEach(System.out::println);

20、对这个Stream做任何map()、filter()等操作都是完全可以的,这说明Stream API对Stream进行转换并生成一个新的Stream并非实时计算,而是做了延迟计算。

21、当然,对这个无穷的Stream不能直接调用forEach(),这样会无限打印下去。但是我们可以利用limit()变换,把这个无穷Stream变换为有限的Stream。

22、利用Stream API,可以设计更加简单的数据接口。例如,生成斐波那契数列,完全可以用一个无穷流表示(受限Java的long型大小,可以改为BigInteger):

23、class FibonacciSupplier implements Supplier<Long>{

24、public static void main(String[] args){

25、Stream<Long> fibonacci= Stream.generate(new FibonacciSupplier());

26、fibonacci.limit(10).forEach(System.out::println);

27、如果想取得数列的前10项,用limit(10),如果想取得数列的第20~30项,用:

28、List<Long> list= fibonacci.skip(20).limit(10).collect(Collectors.toList());

29、最后通过collect()方法把Stream变为List。该List存储的所有元素就已经是计算出的确定的元素了。

30、用Stream表示Fibonacci数列,其接口比任何其他接口定义都要来得简单灵活并且高效。

三、简述java(stream)流的三种分类

把从外部设备流向程序的流成为输入流

根据数据在Stream里的最小传输单位,我们也可以把流分为两类

最小传输单位为1个字符(java里的字符不再用ASCII码表示,而是用万国码,所以1个字符(char)= 2个字节(byte)= 16bit(位)).

3.节点流和处理流(原始流和包裹流)

Java里的stream还可以嵌套.按照流的功能还可以分为节点流和处理流