java7 flatmap_Java 8 Streams FlatMap方法示例

本文通过实例解析Java 8 Stream的flatMap方法,对比Java 7中如何实现相同功能,展示了flatMap在处理集合嵌套、创建特定序列及从短语列表中提取唯一单词等场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

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

final Streamstream = Stream.of(1,2,3,4,5,6,7,8,9,10);

stream.flatMap();

javadoc是

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

如果有人创建了一些关于flatMap的简单实际示例,如何在以前的java版本Java[6,7]中编写代码以及如何使用Java 8编写相同的例程,我将不胜感激。

#1 热门回答(147 赞)

flatMapaStream没有任何意义,就像你在问题中显示的Stream一样。

但是,如果你有aStream>那么它会有意义,你可以这样做:

Stream> integerListStream = Stream.of(

Arrays.asList(1, 2),

Arrays.asList(3, 4),

Arrays.asList(5)

);

Stream integerStream = integerListStream .flatMap(Collection::stream);

integerStream.forEach(System.out::println);

哪个会打印:

1

2

3

4

5

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

List> integerLists = Arrays.asList(

Arrays.asList(1, 2),

Arrays.asList(3, 4),

Arrays.asList(5)

)

List flattened = new ArrayList<>();

for (List integerList : integerLists)

{

flattened.addAll(integerList);

}

for (Integer i : flattened)

{

System.out.println(i);

}

#2 热门回答(105 赞)

##编写例子

想象一下,你想要创建以下序列:1,2,3,3,3,3,4,4,4等等(换句话说:1x1,2x2,3x3等)

WithflatMapit可能看起来像:

IntStream sequence = IntStream.rangeClosed(1, 4)

.flatMap(i -> IntStream.iterate(i, identity()).limit(i));

sequence.forEach(System.out::println);

哪里:

IntStream.rangeClosed(1,4)创建一个从1到4(包括1和4)的int流

IntStream.iterate(i,identity())。limit(i)创建一个int i的长度为i的流 - 所以应用于i = 4它创建一个流:4,4,4,4

flatMap"展平"流并将其"连接"到原始流

使用Java <8,你将需要两个嵌套循环:

List list = new ArrayList<>();

for (int i = 1; i <= 4; i++) {

for (int j = 0; j < i; j++) {

list.add(i);

}

}

##真实世界的例子

假设我有aList其中eachTimeSeries基本上是aMap。我想得到一个所有日期的列表,其中至少有一个时间序列具有值.flatMap来救援:

list.stream().parallel()

.flatMap(ts -> ts.dates().stream()) // for each TS, stream dates and flatmap

.distinct() // remove duplicates

.sorted() // sort ascending

.collect(toList());

它不仅可读,而且如果你突然需要处理100k元素,只需添加parallel()即可在不编写任何并发代码的情况下提高性能。

#3 热门回答(16 赞)

从短语列表中提取排序ASC的唯一单词:

List phrases = Arrays.asList(

"sporadic perjury",

"confounded skimming",

"incumbent jailer",

"confounded jailer");

List uniqueWords = phrases

.stream()

.flatMap(phrase -> Stream.of(phrase.split(" +")))

.distinct()

.sorted()

.collect(Collectors.toList());

System.out.println("Unique words: " + uniqueWords);

......和输出:

Unique words: [confounded, incumbent, jailer, perjury, skimming, sporadic]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值