合并两个流并调用方法
Combine two streams and call method
我在如何异步流式传输和调用方法时遇到问题,
例如
List<User> users = List.of(user1, user2, user3);
List<Workplace> worklpaces = List.of(workplace1,workplace2,workplace3)
总是一样users.size == workplaces.size
我们有一个函数映射
public List<UserWithWorkplace> combineUserWithWorkplaceAndType(List<User> users,List<Workplace>
worklpaces, Type someRandomtype) {
//here is the problem it wont it should be get
//List<UserWithWorkplace>.size == users.size == workplaces.size
return users.stream().flatMap(user ->
worklpaces.stream()
.map(worklpace -> mapping(user,worklpace, someRandomtype)))
.toList()
}
private UserWithWorkplace mapping( User user, Workplace workplace,Type someRandomtype){
//cominging and returning user with workplace
}
如何实现该结果?
假设您要从两个单独的 users
和 workplaces
流创建 (user, workplace)
对,此操作通常称为“压缩”。
Guava 库为此提供了 Streams.zip(Stream, Steam, Function)
方法。在您的情况下,代码如下所示:
Stream<UserWithWorkplace> zipped = Streams.zip(
users.stream(),
worklpaces.stream(),
(u, w) -> this.mapping(u, w, someRandomtype));
但是您的示例代码使用 List
而不是 Stream
来表示数据。我不确定您是否必须为此使用 Java 流,带有 i
索引的简单 for
循环可能更容易。
您描述的是压缩操作。
如果使用 Google 番石榴,你可以这样做来组合它们:
Streams.zip(users.stream(), workplaces.stream(), (user, workplace) -> mapping(user, workplace, someType))
您还可以找到描述此操作的其他一些实现 here
我在如何异步流式传输和调用方法时遇到问题, 例如
List<User> users = List.of(user1, user2, user3);
List<Workplace> worklpaces = List.of(workplace1,workplace2,workplace3)
总是一样users.size == workplaces.size
我们有一个函数映射
public List<UserWithWorkplace> combineUserWithWorkplaceAndType(List<User> users,List<Workplace>
worklpaces, Type someRandomtype) {
//here is the problem it wont it should be get
//List<UserWithWorkplace>.size == users.size == workplaces.size
return users.stream().flatMap(user ->
worklpaces.stream()
.map(worklpace -> mapping(user,worklpace, someRandomtype)))
.toList()
}
private UserWithWorkplace mapping( User user, Workplace workplace,Type someRandomtype){
//cominging and returning user with workplace
}
如何实现该结果?
假设您要从两个单独的 users
和 workplaces
流创建 (user, workplace)
对,此操作通常称为“压缩”。
Guava 库为此提供了 Streams.zip(Stream, Steam, Function)
方法。在您的情况下,代码如下所示:
Stream<UserWithWorkplace> zipped = Streams.zip(
users.stream(),
worklpaces.stream(),
(u, w) -> this.mapping(u, w, someRandomtype));
但是您的示例代码使用 List
而不是 Stream
来表示数据。我不确定您是否必须为此使用 Java 流,带有 i
索引的简单 for
循环可能更容易。
您描述的是压缩操作。
如果使用 Google 番石榴,你可以这样做来组合它们:
Streams.zip(users.stream(), workplaces.stream(), (user, workplace) -> mapping(user, workplace, someType))
您还可以找到描述此操作的其他一些实现 here