gpt4 book ai didi

java - 映射 Stream> 中的各个元素

转载 作者:行者123 更新时间:2023-11-30 06:08:00 24 4
gpt4 key购买 nike

使用 Stream<Collection<T>> 时,我想将 Java 8 Stream API 中的常用方法应用于流中每个集合中 T 类型的每个元素。正如标题所述,我主要想映射元素,但当然所有其他方法(例如 filter(Predicate)allMatch(Predicate) )也很有趣。

考虑存储多个矩形图 block 的 2D 板的示例。每个图 block 由它在棋盘上占据的 (x, y) 位置定义。

List<Position> tile1 = Lists.asList(tile1Pos1, tile1Pos2, ...)
List<Position> tile2 = Lists.asList(tile2Pos1, tile2Pos2, ...)
...
List<List<Position>> board = Lists.asList(tile1, tile2, ...)

旋转棋盘时,我想转换所有图 block 的位置。我需要对每个位置应用相同的 x 到 y 和 y 到 x 映射函数。但是,我必须保留图 block 及其各自位置之间的关联。

目前,我正在使用我的 Stream<List<Position>> streamOfCollections 执行以下操作:

List<List<Position>> rotatedBoard = board.stream().map(tile -> tile.stream().map(Position::mapperFunctionRotate).collect(toList())).collect(toList());

请注意,我保留了数据的原始布局。每个位置仍然与其所属的一个特定图 block 相关联。

概括,对于任何 Stream<Collection<T>>我想修改 T 类型的所有单个元素,同时将它们保留在集合中。理想情况下,我希望能够做到 board.stream().mapIndividually(Position::mapperFunctionRotate)它具有与 flatMap 类似的方法签名在 Java Stream API 中,但不会展平我的列表流。

有什么方便的方法可以简化上面的映射函数吗?

我也在寻找可以完成工作的库或框架。在我看来,Java API 不支持这样的事情,我认为其他库实际上是这个问题的主要范围。

我已经看过guava,它提供了像Multimap<K, V>这样的数据结构。表现得像 Map<K, Collection<V>> ,但我没能找到 Java Stream API 的扩展。

最佳答案

您不是在寻找平面图吗?

 .stream().flatMap(Collection::stream).collect(Collectors.toList());

关于java - 映射 Stream<Collection<T>> 中的各个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40677236/

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