做网站一年大概的盈利,大型网站开发考试,江门市骏业纸制品有限公司,雷州网站大家好#xff0c;许多读者给我发了电子邮件#xff0c;写了一篇有关Java 8的地图和过滤器功能的文章#xff0c;因为他们发现它们难以理解和使用。 即使我以前同时写过有关map#xff08;#xff09;和filter#xff08;#xff09;的博客#xff0c;我仍在写这篇文章… 大家好许多读者给我发了电子邮件写了一篇有关Java 8的地图和过滤器功能的文章因为他们发现它们难以理解和使用。 即使我以前同时写过有关map和filter的博客我仍在写这篇文章以更多的外行语言来解释该概念以更好地理解我的读者和Java开发人员。 map函数是Stream类中的一种方法表示一种功能编程概念。 简而言之 map()用于通过应用function将一个对象转换为另一个对象 。 这就是Stream.map(Function mapper)将函数作为参数的原因。 例如通过使用map函数可以通过将Integer.valueOf方法应用于输入列表中的每个String将String列表转换为Integer列表。 您只需要一个映射函数即可将一个对象转换为另一个对象而map函数将为您完成转换。 这也是中间流操作这意味着您可以调用其他Stream方法例如过滤器或对此进行收集以创建转换链。 现在按照其名称暗示的那样使用filter方法 它会根据您提供给您的条件来过滤元素 。 例如如果您的列表中包含数字而您只想要偶数则可以使用过滤器方法选择唯一可被二整除的数字。 过滤方法实质上是根据您提供的条件选择元素。 这就是filter(Predicate condition)接受提供应用条件功能的Predicate对象的原因。 如果条件评估为true则选择对象否则将其忽略。 与map相似过滤器也是中间操作这意味着您可以在调用过滤器后调用其他Stream方法。 filter方法也是惰性的 这意味着它只有在调用诸如collect这样的简化方法时才会被评估并且一旦到达目标就将停止。 1.如何在Java 8中使用地图和过滤器 您需要一个很好的例子来理解新概念这就是您阅读本文的原因。 由于String和Integer是Java中最常见的数据类型因此我选择了一个既简单又有趣的示例。 我有一个String列表它是数字例如{1, 2, 3, 4, 5, 6}我想处理此列表并且需要另一个带有偶数的Integer列表数字 。 为了找到偶数我首先需要将String列表转换为Integer列表为此我可以使用java.util.Stream类的map方法但是在此之前我们需要将Stream作为map()在java.util.stream中定义。 流类。 但是这一点都不困难因为您可以通过调用stream方法从任何Collection例如List或Set中获取流因为它是在java.util.Collection接口中定义的。 map(Function mapper)方法采用一个Function 从技术上讲是java.util.function.Function interface一个对象。 然后将此函数应用于Stream的每个元素以转换为所需的类型。 由于我们需要将String转换为Integer因此可以将Integer.parseInt()或Integer.valueOf()方法传递给map()函数。 我之所以选择valueOf()方法是因为我在parseInt与valueOf文章中提到的原因即性能和缓存。 然后map()将返回一个包含偶数和奇数的整数流。 要只选择偶数我们可以使用filter()方法。 它需要一个Predicate对象从技术上讲它是将对象转换为boolean的函数 。 我的意思是我们传递了一个对象它将返回true或false。 过滤器使用该信息将对象包括在结果流中。 因此为了只包括偶数我们将其称为filter( number - number%20) 这意味着每个数字将被零除如果没有余数则将其选中。 我们差不多完成了但是到目前为止我们只有偶数的Stream而不是偶数的List这就是为什么我们需要使用collect方法的原因该方法将Stream的元素收集到指定的Collection中。 由于我们需要列表因此我调用了collect(Collectors.toList()) 它将把所有偶数累加到List中并返回。 现在您可能正在考虑如何知道要返回的Integer列表它很好地通过类型推断来获取该信息因为我们已经通过将结果存储到ListInteger 。 2. Java 8 Map 过滤器收集示例 这是Java程序用于实现我在上一节中所说的内容。 您可以在IDE中或从命令行运行此程序然后查看结果。 您还可以尝试使用更多的map()函数或更多的filter()调用来使合成更长更复杂。 您甚至可以使用collect()方法将结果收集到列表集合地图或任何其他集合中。 package tool;import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;/*** * A simple Java Program to demonstrate how to use map and filter method Java 8.* In this program, well convert a list of String into a list of Integer and* then filter all even numbers.*/
public class Hello {public static void main(String[] args) {ListString numbers Arrays.asList(1, 2, 3, 4, 5, 6);System.out.println(original list: numbers);ListInteger even numbers.stream().map(s - Integer.valueOf(s)).filter(number - number % 2 0).collect(Collectors.toList());System.out.println(processed list, only even numbers: even);}}Output
original list: [1, 2, 3, 4, 5, 6]
the processed list, only even numbers: [2, 4, 6] 您可以看到原始列表包含从1到6的数字而过滤后的列表仅包含偶数即2、4和6。 此示例中最重要的代码是以下4行Stream处理代码 此代码首先绘制地图然后过滤并最终收集。 您可能想知道订单是否重要是否确实如此。 由于我们的过滤条件需要一个int变量因此我们首先需要将String 流转换为Integer流 这就是为什么我们首先调用map()函数的原因。 一旦获得整数流就可以应用数学找出偶数然后将该条件传递给filter方法。 如果我们需要对String进行过滤例如选择所有length 2字符串那么我们将在map之前调用filter。 这就是如何在Java 8中使用map和filter的全部内容。 我们已经看到了一个有趣的示例说明如何使用地图将对象转换为另一个对象并根据条件进行过滤以选择对象。 我们还学习了如何在流上编写操作以编写清晰明了的代码。 感谢您到目前为止阅读本教程。 如果您喜欢这个Java 8 map 过滤器示例和我的解释请与您的朋友和同事分享。 如果您有任何疑问或反馈请留言。 翻译自: https://www.javacodegeeks.com/2018/05/java-8-filter-map-collect-stream-example.html