带有示例的 Java Stream map()

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(399)   2023-06-26 07:54:18

Java 8 Stream.map()Stream<X> 转换为 Stream<Y>。对于每个 X 类型的对象,都会创建一个新的 Y 类型的对象,并将其放入新的 Stream 中。

1. 流 map() API

1.1.方法语法

Stream map() 方法具有以下语法。

<R> Stream<R> map(Function<? super T,? extends R> mapper)
  • R 表示新流的元素类型。
  • mapper 是一个无干扰、无状态的函数,适用于每个产生新值流的元素。
  • 该方法返回类型为 R 的新对象流。

Stream 接口有另外三个类似的方法,分别生成 IntStreamLongStreamDoubleStream分别经过map操作。

如果在 map() 操作之后创建的流被赋予返回类型,那么请考虑直接使用这些函数。

IntStream mapToInt(ToIntFunction<? super T> mapper)
LongStream mapToLong(ToLongFunction<? super T> mapper)
DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper)

1.2.描述

  • map() 是一个中间操作。它返回一个新的 Stream 作为返回值。
  • map() 操作接受一个 Function,为输入流中的每个值调用它并产生一个发送到输出流的结果值。
  • 用于转换的映射器函数是一个无状态函数(不存储之前处理过的对象的信息)并且只返回一个单一值
  • map() 方法用于将 X 的 Stream 转换为 Y 的 Stream。
  • 映射流在其内容被放入新的输出流后关闭。
  • map() 操作不会像 flatMap() 操作那样展平流。

2. Stream map() 例子

示例 1:将字符串流转换为整数流

在此示例中,我们将把 Stream<String> 转换为 Stream<Integer>。这里的 mapper 函数 Integer::valueOf() 一次从 Stream 中取出一个字符串,并将 String 转换为 $ $$

然后它将 Integer 放入另一个流中,然后使用 Collectors.toList() 收集该流。

List<String> listOfStrings = Arrays.asList("1", "2", "3", "4", "5");
 
List<Integer> listOfIntegers = listOfStrings.stream()
        .map(Integer::valueOf)
        .collect(Collectors.toList());
 
System.out.println(listOfIntegers);

程序输出。

[1, 2, 3, 4, 5]

示例 2:查找所有员工中所有不同的薪水

List 员工查找所有可能的 distinct 薪水的 Java 示例。

List<Employee> employeesList = Arrays.asList(
                                    new Employee(1, "Alex", 100),
                                    new Employee(2, "Brian", 100),
                                    new Employee(3, "Charles", 200),
                                    new Employee(4, "David", 200),
                                    new Employee(5, "Edward", 300),
                                    new Employee(6, "Frank", 300)
                                );
  
List<Double> distinctSalaries = employeesList.stream()
                        .map( e -> e.getSalary() )
                        .distinct()
                        .collect(Collectors.toList());

System.out.println(distinctSalaries);

程序输出。

[100.0, 200.0, 300.0]

请将您与 Java Stream API 中的Stream map() 方法 相关的问题发给我。

快乐学习!!

地址:https://www.cundage.com/article/stream-map-example.html

相关阅读

Java 8 Stream.map() 将 Stream&lt;X&gtl; 转换为 Stream&lt;Y&gtl;。对于每个 X 类型的对象,都会创建一个新的 Y 类型的对象,并将其放入新的...
Stream skip(n) 方法用于从给定 Stream 中跳过第一个 'n' 元素。 skip() 方法返回一个新的 Stream,它包含原始 Stream 的剩余元素,在指定的 n 元素被...
Stream flatMap() 方法用于将集合流扁平化为对象流。这些对象是从原始 Stream 中的所有集合组合而来的。 flatMap() 操作具有对 Stream 的元素应用一对多转换的效...
学习使用 Stream.concat() 方法用于将两个流合并为一个流,该流由两个合并流的所有元素组成。 1.流concat()方法 static &lt;T&gtl; Stream&lt;T&...
学习计算 Stream 中由指定过滤器表达式传递的匹配项。统计项目,我们可以使用以下两种方法,都是终端操作,结果是一样的。 Stream.count() Stream.collect(Colle...
Java Stream anyMatch(predicate) 是终端短路操作。它用于检查 Stream 是否包含至少一个满足给定 Predicate 的元素。 1. 流 anyMatch() ...
findFirst() 方法返回一个 Optional 描述 给定流的第一个元素 如果 流 是非空的,或者如果流为空,则为空 Optional。 1.流findFirst()方法 Optiona...
findAny() 方法返回一个 Optional 描述 给定流的任何元素 如果 流 是非空的,或者如果流为空,则为空 Optional。 在非并行流中,findAny() 将在大多数情况下返回...
了解如何使用 Stream toArray() API 将 Stream 转换为数组。在本教程中,我们将看到多个示例,用于将 Stream 元素收集到 数组。 1. Stream toArray...
Java Stream allMatch() 是一个短路终端操作,用于检查流中的所有元素是否满足提供的谓词。 1.流allMatch()方法 1.1.句法 boolean allMatch(Pr...