中间方法
Java 8 引入了 Stream API,以促进 Java 中的函数式编程。Stream API 旨在以函数式方式处理对象集合。根据定义,Stream 是可以对其元素进行内部迭代的 Java 组件。
Stream 接口具有终端方法和非终端方法。非终端方法是向流添加侦听器的操作。当调用流的终端方法时,将开始流元素的内部迭代,并为每个元素调用附加到流的侦听器,并通过终端方法收集结果。
此类非终端方法称为中间方法。只能通过称为终端的方法来调用中间方法。以下是 Stream 接口的一些重要中间方法。
filter − 根据给定的标准从流中过滤掉不需要的元素。此方法接受一个谓词并将其应用于每个元素。如果谓词函数返回 true,则元素将包含在返回的流中。
map − 根据给定的条件将流中的每个元素映射到另一个项目。此方法接受一个函数并将其应用于每个元素。例如,将流中的每个字符串元素转换为大写字符串元素。
flatMap − 此方法可用于根据给定的条件将流中的每个元素映射到多个项目。当需要将复杂对象分解为简单对象时使用此方法。例如,将句子列表转换为单词列表。
distinct − 如果存在重复项,则返回唯一元素流。
limit −返回有限元素流,其中通过向 limit 方法传递数字来指定限制。
示例 - 中级方法
import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class FunctionTester { public static void main(String[] args) { List<String> stringList = Arrays.asList("One", "Two", "Three", "Four", "Five", "One"); System.out.println("Example - Filter"); //过滤长度大于3的字符串。 Stream<String> longStrings = stringList .stream() .filter( s -> {return s.length() > 3; }); //打印字符串 longStrings.forEach(System.out::println); System.out.println("Example - Map"); //将字符串映射为大写并打印 stringList .stream() .map( s -> s.toUpperCase()) .forEach(System.out::println); List<String> sentenceList = Arrays.asList("I am Mahesh.", "I love Java 8 Streams."); System.out.println("Example - flatMap"); //将字符串映射为大写并打印 sentenceList .stream() .flatMap( s -> { return (Stream<String>) Arrays.asList(s.split(" ")).stream(); }) .forEach(System.out::println); System.out.println("Example - distinct"); //将字符串映射为大写并打印 stringList .stream() .distinct() .forEach(System.out::println); System.out.println("Example - limit"); //将字符串映射为大写并打印 stringList .stream() .limit(2) .forEach(System.out::println); } }
输出
Example - Filter Three Four Five Example - Map ONE TWO THREE FOUR FIVE ONE Example - flatMap I am Mahesh. I love Java 8 Streams. Example - distinct One Two Three Four Five Example - limit One Two