Java 9:Stream API改进

时间:2020-02-23 14:34:55  来源:igfitidea点击:

在Java 9中,将添加以下方法以进行Stream 包的Stream 接口。

这些方法是默认和静态的。

uporewhile()方法

该方法包含在Stream 接口中,并用于将元素收集到Stream 中。
它需要所有元素,直到指定为谓词的条件。

例如,我们希望从元素Stream 中收集一些元素;为此,我们可以使用 takeWhile()方法。

以下是该方法的语法。

default Stream<T> takeWhile(Predicate<? super T> predicate)

例子

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class Main{
    public static void main(String[] args){
        List<Integer> list = Stream.of(20,30,40,62,85,21)  
                .takeWhile(i -> (i<85)).collect(Collectors.toList());
        System.out.println(list); //collecting into a list
 
        //traverse elements
        Stream<Integer> stream = Stream.of(20,30,40,62,85,21);
        stream.takeWhile(num -> num < 85).forEach(num -> System.out.println(num));
    }
}

输出

[20, 30, 40, 62]
20
30
40
62

dropwhile()方法

这种方法与之相反 takeWhile()
当指定的条件发生并占用剩余元素时,它会降低结果。

如果订购Stream ,则返回丢弃元素后包含剩余元素的Stream 。
如果Stream 是无序的,则返回一个Stream ,其中包括丢弃元素子集后的剩余元素。
以下是该方法的语法。

default Stream<T> dropWhile(Predicate<? super T> predicate)

例子

package myjavaproject;
 
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class Main{
    public static void main(String[] args){
        List<Integer> list = Stream.of(20,30,40,62,85,21)  
                .dropWhile(i -> (i<85)).collect(Collectors.toList());
        System.out.println(list); //collecting into a list
 
        //traverse elements
        Stream<Integer> stream = Stream.of(20,30,40,62,85,21);
        stream.dropWhile(num -> num < 85).forEach(num -> System.out.println(num));
    }
}

输出

[85, 21]
85
21

upullable()方法

此方法用于NULL检查,返回单个元素的顺序Stream 或者空

Stream
下面给出该方法的语法。

static <T> Stream<T> ofNullable(T t)

例子

import java.util.stream.Stream;
 
public class Main{
    public static void main(String[] args){
        Stream<Integer> stream = Stream.ofNullable(12);
        stream.forEach(System.out::print);
 
        stream = Stream.ofNullable(null);
        stream.forEach(System.out::print); //empty stream
    }
}

输出

12

迭代()方法

此方法被添加到Java 9中,有助于迭代一系列Stream 并采用三个参数。
第一个参数称为种子并用于初始化Stream ,第二个参数称为谓词,用于指定条件,而第三参数用于生成下一个元素。

下面给出该方法的语法。

static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)

例子

import java.util.stream.Stream;
 
public class Main{
    public static void main(String[] args){
        Stream<Integer> stream = Stream.iterate(1, a->a<5, a->a+1);
        stream.forEach(System.out::println);
    }
}

输出

1
2
3
4

这类似于编写一个for循环,如下所示:

for(int i=1;i<5;i++)
{
   System.out.println(i)
}