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) }