Java9 Stream API改进

1 Java9 Stream API新增方法

在Java 9中,改进了Stream API,并将新方法添加到Stream接口。这些方法如下表所示。

修复 方法 描述
default Stream<T> takeWhile(Predicate<? super T> predicate) 如果此流是有序的,它将返回一个流,该流由与此流中匹配给定Predicate的元素的最长前缀组成。否则,如果此流是无序的,则返回一个流,该流由从该流中获取的与给定Predicate匹配的元素的子集组成。
default Stream<T> dropWhile(Predicate<? super T> predicate) 如果删除此流,则返回一个包含该流其余元素的流,然后删除与给定Predicate匹配的元素的最长前缀。否则,如果此流是无序的,则返回在删除与给定Predicate匹配的元素子集之后由该流的其余元素组成的流。
static <T> Stream<T> ofNullable(T t) 如果不为null,则返回包含单个元素的顺序Stream,否则返回空Stream。
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next) 以满足给定的hasNext的Predicate为条件,将通过将给定的next函数迭代应用到初始元素而产生的顺序有序Stream返回。当hasNext的Predicate返回false时,流终止。

2 Java Stream API:takeWhile()方法

Stream takeWhile方法采用与其Predicate匹配的每个元素。当得到不匹配的元素时,它停止。它返回包含所有匹配元素的元素子集,流的其他部分被丢弃。

3 Java Stream API:takeWhile()方法案例1

在此示例中,我们有一个整数列表,并使用takewhile方法获取了偶数值。

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.List;  
import java.util.stream.Collectors;  
import java.util.stream.Stream;  
public class StreamExample {  
    public static void main(String[] args) {  
        List<Integer> list   
        = Stream.of(1,2,3,4,5,6,7,8,9,10)  
                .takeWhile(i -> (i % 2 == 0)).collect(Collectors.toList());     
    System.out.println(list);  
    }  
}  

本示例返回一个空列表,因为它在第一个列表元素处失败,并且takewhile在此处停止。

输出结果为:

[]

4 Java Stream API:takeWhile()方法案例2

在此示例中,我们获得了前两个元素,因为它们是偶数且停在第三个元素。

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.List;  
import java.util.stream.Collectors;  
import java.util.stream.Stream;  
public class StreamExample {  
    public static void main(String[] args) {  
        List<Integer> list   
        = Stream.of(2,2,3,4,5,6,7,8,9,10)  
                .takeWhile(i -> (i % 2 == 0)).collect(Collectors.toList());     
    System.out.println(list);  
    }  
}  

输出结果为:

[2,2]

5 Java Stream API:dropWhile()方法

Stream dropWhile方法根据流元素的顺序返回结果。

有序流:在删除与给定Predicate匹配的元素后,返回包含元素的流。

无序流:在删除与给定Predicate匹配的元素子集之后,它返回包含该流剩余元素的流。

6 Java Stream API:dropWhile()方法案例

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.List;  
import java.util.stream.Collectors;  
import java.util.stream.Stream;  
public class StreamExample {  
    public static void main(String[] args) {  
        List<Integer> list   
        = Stream.of(2,2,3,4,5,6,7,8,9,10)  
                .dropWhile(i -> (i % 2 == 0)).collect(Collectors.toList());     
    System.out.println(list);  
    }  
}

输出结果为:

[3, 4, 5, 6, 7, 8, 9, 10]

7 Java Stream API:ofNullable()方法

Stream ofNullable方法返回包含单个元素(如果非null)的顺序流。否则,它将返回一个空流。

它有助于处理空流和NullPointerException。

8 Java Stream API:ofNullable()方法案例1

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.List;  
import java.util.stream.Collectors;  
import java.util.stream.Stream;  
public class StreamExample {  
    public static void main(String[] args) {  
        List<Integer> list   
        = Stream.of(2,2,3,4,5,6,7,8,9,10)  
                .dropWhile(i -> (i % 2 == 0)).collect(Collectors.toList());     
    System.out.println(list);  
    }  
}  

输出结果为:

25
Stream can have null values also.

9 Java Stream API:ofNullable()方法案例2

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.stream.Stream;  
  
public class StreamExample {  
    public static void main(String[] args) {  
        Stream<Integer> val   
        = Stream.ofNullable(null);     
    val.forEach(System.out::println);  
    }  
}  

该程序不会产生任何输出。

10 Java Stream API:迭代方法

新的重载方法iterate已添加到Java 9流接口。此方法允许我们迭代流元素直到指定条件。

它需要三个参数:seed,hasNext和next。

11 Java Stream API:迭代方法案例

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.stream.Stream;  
  
public class StreamExample {  
    public static void main(String[] args) {  
        Stream.iterate(1, i -> i <= 10, i -> i*3)  
        .forEach(System.out::println);  
    }  
}  

输出结果为:

1
3
9

 

热门文章

优秀文章