【问题标题】:Merging/consuming multiple Java 8 streams into one stream [duplicate]将多个 Java 8 流合并/使用为一个流 [重复]
【发布时间】:2018-01-29 10:08:08
【问题描述】:

假设我有两个流:

Stream<String> ids = Stream.of("id1","id2","id3","id4","id5");
Stream<MyObj> objects = Stream.of(new MyObj(null, "some data"), new MyObj(null, "some other data");

现在我想用来自ids 的数据更新我的objects 流。结果应该等同于以下 Stream:

Stream<MyObj> objects = Stream.of(new MyObj("id1", "some data"), new MyObj("id2", "some other data");

因此,我想知道是否有一种方法可以同时使用两个流,一个元素。我想像某种“双重消费者”(与double无关):

Stream<MyObj> result = DoubleConsumer.of(ids, objects)
                          .map((id, myobj) -> combine(id, myobj));

MyObj combine(String id, MyObj myobj) {
  myobj.set(id);
  return myobj;
}

知道如何实现这样的目标吗?

更新

我知道我可以在列表的情况下通过一些双循环或 FuncionalJava 的zipfunction 解决这个问题。然而问题是如何用 Java Streams 做到这一点。

【问题讨论】:

  • 为什么是双重消费者?您在第二个示例中使用的是 new 吗?
  • 你可以使用循环和普通列表吗?
  • 可以创建新的 MyObj 实例而不是更新旧实例吗?
  • @agnul,您链接的问题没有答案

标签: java java-stream


【解决方案1】:

你想要 Stream.map。例如。

Stream<MyObj> objs = ids.map(id->new MyObj(id, "some data"));

这正是 op 想要的。然后,如果他们想在之后更新对象的值,并且对象知道他们的 id 以便可以获取。

如果他们想“压缩”两个流,他们应该检查现有的答案。

【讨论】:

    猜你喜欢
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多