gpt4 book ai didi

java - 我对 Java Stream.flatMap 的理解正确吗?

转载 作者:行者123 更新时间:2023-12-01 18:07:17 25 4
gpt4 key购买 nike

我试图回答这个问题question ,但我没有这样做,因为我对 Streams 还不够了解。请告诉我我的解释是否正确。

我的回答:

import java.util.Arrays;
import java.util.stream.Stream;

public class Temp {
public static void main(String [] args){
String [] input = {"1,2", "3,4", "5"};
String [] expected = {"1", "2", "3", "4", "5"};

String [] actual = Stream.of(input)
.flatMap(s -> Arrays.stream(s.split(",")))
.toArray(String [] :: new);

//Testing - Runs only when assertions are enabled for your JVM. Set VM args = -ea for your IDE.
assert Arrays.equals(actual, expected) : "Actual array does not match expected array!";
}
}

我的解释:

1 - 获取一个元素流(本例中为字符串)并一次将一个元素传递给 flatMap

问题 - 这实际上是一次一个元素吗?

2 - flatMap 采用一个 Function 将元素转换为 Stream。在示例中,该函数接受一个字符串(“1,2”)并将其转换为多个字符串(“1”,“2”)的流。多个字符串的流是由 Arrays.stream(an array) 生成的,我们知道它接受一个数组并将其转换为流。该数组是由 s.split(",") 生成的。所有其他元素都会被处理并放入这一流中。

问题 - flatMap 是否为输入数组中的所有元素返回一个流,还是为输入数组的每个元素返回一个流?

3 - toArray 获取从 flatMap 获取的单个流中的元素,并将它们放入一个数组中。

最佳答案

平面 map 的预定义语法是

<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)

where, R is the element type of the new stream.
Stream is an interface and T is the type
of stream elements. mapper is a stateless function
which is applied to each element and the function
returns the new stream.

那么 flatMap 内部是如何工作的?

它首先将返回另一个Optional的函数应用于内部对象(如果存在),然后在返回结果之前将结果展平,因此您不必自己执行此操作。

其内部定义如下

public static <T> Optional<T> flatten(Optional<Optional<T>> optional) {
return optional.orElse(Optional.empty());
}

所以在你的情况

String [] actual = Stream.of(input)
.flatMap(s -> Arrays.stream(s.split(",")))
.toArray(String [] :: new);

StreamofInput(input) - taking input as collection
flatMap: adding map function
s-> Arrays.stream(s.split(","))- taking argument from your arrays individually which is represent by "s" , then converting your array which is splitted by "," and converting into stream.
toArray : converting you result into flat single array because its stateless so it will give you new collection.

更多信息您可以访问here

关于java - 我对 Java Stream.flatMap 的理解正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60539486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com