Java 8 Streams FlatMap 方法示例 [英] Java 8 Streams FlatMap method example

查看:30
本文介绍了Java 8 Streams FlatMap 方法示例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在检查即将发布的 Java 更新,即:Java 8 或 JDK 8.是的,我很不耐烦,有很多新东西,但是,有一些我不明白,一些简单的代码:

I have been checking the upcoming Java update, namely: Java 8 or JDK 8. Yes, I am impatient, there's a lot of new stuff, but, there is something I don't understand, some simple code:

final Stream<Integer>stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
stream.flatMap();

javadoc 是

public <R>Stream <R>flatMap(Function> mapper)

返回一个流,该流由通过将提供的映射函数应用于每个元素而生成的映射流的内容替换此流的每个元素的结果组成.每个映射流在其内容放入此流后关闭.(如果映射流为空,则使用空流代替.)这是一个中间操作.

Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element. Each mapped stream is closed after its contents have been placed into this stream. (If a mapped stream is null an empty stream is used, instead.) This is an intermediate operation.

如果有人创建了一些关于 flatMap 的简单真实示例,您如何在以前的 Java 版本中对其进行编码,我将不胜感激 Java[6,7] 以及您如何可以使用 Java 8 编写相同的例程.

I would appreciate if somebody created some simple real-life examples about flatMap, how you could code it in previous java versions Java[6,7] and how you can code the same routines using Java 8.

推荐答案

flatMap 一个 Stream 已经是平坦的,就像您在问题中显示的 Stream 一样.

It doesn't make sense to flatMap a Stream that's already flat, like the Stream<Integer> you've shown in your question.

但是,如果你有一个 Stream> 那么它就有意义,你可以这样做:

However, if you had a Stream<List<Integer>> then it would make sense and you could do this:

Stream<List<Integer>> integerListStream = Stream.of(
    Arrays.asList(1, 2), 
    Arrays.asList(3, 4), 
    Arrays.asList(5)
);

Stream<Integer> integerStream = integerListStream .flatMap(Collection::stream);
integerStream.forEach(System.out::println);

哪个会打印:

1
2
3
4
5

要在 Java 8 之前执行此操作,您只需要一个循环:

To do this pre-Java 8 you just need a loops:

List<List<Integer>> integerLists = Arrays.asList(
    Arrays.asList(1, 2), 
    Arrays.asList(3, 4), 
    Arrays.asList(5)
)

List<Integer> flattened = new ArrayList<>();

for (List<Integer> integerList : integerLists) {
    flattened.addAll(integerList);
}

for (Integer i : flattened) {
    System.out.println(i);
}

这篇关于Java 8 Streams FlatMap 方法示例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆