我有一個問題如何異步流式傳輸并呼叫方法,例如
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
}
如何達到這個結果?
uj5u.com熱心網友回復:
假設您想(user, workplace)從兩個單獨users的workplaces流創建對,此操作通常稱為“壓縮”。
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 流,for帶有索引的簡單回圈i可能會更容易。
uj5u.com熱心網友回復:
您所描述的是壓縮操作。
如果使用 Google Guava,您可以這樣做來組合它們:
Streams.zip(users.stream(), workplaces.stream(), (user, workplace) -> mapping(user, workplace, someType))
您還可以找到此處描述的此操作的其他一些實作
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453707.html
