当前位置: 首页 > 知识库问答 >
问题:

从流中收集连续对

祖浩淼
2023-03-14

给定诸如{0,1,2,3,4}之类的流,

我怎样才能最优雅地将它转换成给定的形式:

{新建对(0,1),新建对(1,2),新建对(2,3),新建对(3,4)}

(当然,假设我定义了类对)?

编辑:这不是严格的关于int或基元流。对于任何类型的流,答案都应该是通用的。

共有1个答案

施子民
2023-03-14

我的StreamEx库扩展了标准流,它为所有流类型提供了pairmap方法。对于基元流,它不改变流类型,但可以用来进行一些计算。最常见的用法是计算差异:

int[] pairwiseDiffs = IntStreamEx.of(input).pairMap((a, b) -> (b-a)).toArray();

对于对象流,您可以创建任何其他对象类型。我的库没有提供任何新的用户可见的数据结构,如pair(这是库概念的一部分)。但是,如果您有自己的pair类并希望使用它,则可以执行以下操作:

Stream<Pair> pairs = IntStreamEx.of(input).boxed().pairMap(Pair::new);

或者您已经有一些:

Stream<Pair> pairs = StreamEx.of(stream).pairMap(Pair::new);

此功能是使用自定义拆分器实现的。它具有很低的开销和良好的并行化能力。当然,它适用于任何流源,而不仅仅是像许多其他解决方案那样的随机访问列表/数组。在许多测试中,它表现得非常好。这里是一个JMH基准测试,我们使用不同的方法在一个较大的值之前找到所有输入值(参见本问题)。

 类似资料:
  • 问题内容: 鉴于流,例如, 如何最优雅地将其转换为给定形式: (当然,假设我已经定义了Pair类)? 编辑:这不严格有关整数或原始流。对于任何类型的流,答案应该是通用的。 问题答案: 我的StreamEx库扩展了标准流,它pairMap为所有流类型提供了一种方法。对于原始流,它不会更改流类型,但可用于进行一些计算。最常见的用法是计算差异: 对于对象流,你可以创建任何其他对象类型。我的库没有提供任何

  • 我有一个列表,我想用流过滤,抓取前10个,并显示给用户。按下按钮后..我想从那个位置继续流。 但问题是,这里我不得不在第一个10+多个不匹配的过滤器上运行过滤器(再次)。

  • 我有一个嵌套的映射,其中key是员工名称,values是另一个映射,其中key是公司名称,value是经验年数,如下所示 现在我的函数应该返回一个映射,以员工姓名为键,以总经验为值。我如何使用java流(在单个流中)做到这一点

  • 问题内容: 我想接受输入并对其应用并行流,然后我希望将输出作为列表。输入可以是任何列表或可以对其应用流的任何集合。 我在这里担心的是,如果我们要输出为map,我们可以从java中选择一个选项,例如 但是我看不到以线程安全的方式从并行流收集以提供列表作为输出的选项。我看到那里还有一个选择 通过这种方式,我们可以在collect方法中提供各种并发实现。但是我认为java.util.concurrent

  • 为了更好地理解新的流API,我试图转换一些旧代码,但我被困在这一个。 我似乎无法为它创建有效的收集器:

  • 我想获取地图的值,找到min值,并为地图的每个条目构造一个新的CodesWitMinValue实例。我希望使用Java11个流,我可以在多行中使用多个流(一个用于min值,一个用于转换)来实现这一点。是否可以使用java 11流和收集器在单行中实现?谢谢。