流 API 改进

原文:https://www.studytonight.com/java-9/stream-api-improvement

Java 在 Java 9 版本的 流 API 中加入了一些新的方法。这些方法返回一个集合流,例如,我们希望获得一个带有指定谓词的集合流。我们将借助示例来讨论这些,但是首先,让我们看看 Java 9 在 流 API 中添加了什么(方法)。

  • takeWhile()
  • dropWhile()
  • 迭代()
  • ofNullable()

Java takeWhile()方法

此方法用于获取一个流,该流由从该流中获取的与给定谓词匹配的元素子集组成。

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

示例:Takewhile()方法

此方法将元素带到指定的谓词。例如,如果我们向 10 提供谓词,那么它将元素保持到 10,并停止进一步遍历。

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,15,30,10,50)  
                    .takeWhile(i -> (i>10)).collect(Collectors.toList());     
        System.out.println(list);  
    }
}

【20,15,30】

示例 2: takeWhile()方法

在这个例子中,我们有一个字符流,并获得该流的一个子集,直到‘h’并收集到一个列表中。

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main { 
    public static void main(String[] args){  
         List<String> list   
            = Stream.of("a", "b", "c", "d", "e", "f", "g", "h", "i")  
                    .takeWhile(a->!a.equals("h")).collect(Collectors.toList());     
        System.out.println(list);  
    }
}

【a、b、c、d、e、f、g】

Java dropWhile()方法

此方法用于获取指定谓词后的流子集。它会删除指定元素之前累积的所有元素。

换句话说,我们可以说,在删除了与给定谓词匹配的元素子集后,它返回了一个由该流的剩余元素组成的流。

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

示例:dropWhile()方法

在本例中,我们通过使用 dropWhile()方法获得了出现在“h”之后的元素列表。

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main { 
    public static void main(String[] args){  
         List<String> list   
            = Stream.of("a", "b", "c", "d", "e", "f", "g", "h", "i")  
                    .dropWhile(a->!a.equals("h")).collect(Collectors.toList());     
        System.out.println(list);  
    }
}

【h,I】

示例 2: dropWhile()

public class Main { 
    public static void main(String[] args){  
         List<Integer> list   
            = Stream.of(20,15,30,10,50)  
                    .dropWhile(i -> (i>10)).collect(Collectors.toList());     
        System.out.println(list);  
    }
}

【10,50】

流:新的迭代方法

Java 9 流接口增加了一个新的重载方法迭代。这个方法允许我们迭代流元素直到指定的条件。

它需要三个参数,seed、hasNext 和 Next。

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

示例:

在这个例子中,我们通过迭代 iterate() 方法将奇数元素收集到一个列表中。

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main { 
    public static void main(String[] args){    
         Stream<Integer> listN = Stream.iterate(1, i->i<10, i->i+2);
         List<Integer> list = listN.collect(Collectors.toList());
         System.out.println(list);   
    }
}

【1,3,5,7,9】