gpt4 book ai didi

java - 使用 Java 8 Streams 从不同类型的另一个集合更新集合

转载 作者:行者123 更新时间:2023-12-02 09:55:18 25 4
gpt4 key购买 nike

这里是 Java 8。我有 2 个 POJO:

public class User {
private String id;
private String moniker;
// ... lots of other fields

// Getters & setters down here
}

public class UserDetail {
private String userId;
private String moniker;
// ... lots of other fields

// Getters & setters down here
}

我得到了 List<User>和一个 Set<UserDetail> 。如果有UserDetails在那个集合中,谁的userId字段匹配 User#id 中的任何一个用户列表中的值,我需要更新相应的 User#monikerUserDetail 中的同名字段设置。

我已经能够用“旧”方式(Java 8 之前的 Stream/Collection API)来做到这一点,如下所示:

final List<User> users = userService.fetchSomehow();
final Set<UserDetail> userDetails = userDetailService.fetchSomehow();

for (UserDetail userDetail : userDetails) {
for (User user : users) {
if (userDetail.getUserId().equals(user.getId())) {
user.setMoniker(userDetail.getMoniker());
}
}
}

我如何使用 Java 8 API 来做到这一点?也就是说,我如何循环遍历两个集合,并且对于具有匹配 ID 的任何元素,使用 moniker值来自UserDetails更新moniker Users 中的值?

最佳答案

如果将userDetails放入 map 中,性能会更好

Map<String, String> userDetailsMap = userDetails.stream()
.collect(Collectors.toMap(UserDetail::getUserId, UserDetail::getMoniker));

users.stream().filter(u -> userDetailsMap.containsKey(u.getId())).forEach(u -> {
u.setMoniker(userDetailsMap.get(u.getId()));
});

关于java - 使用 Java 8 Streams 从不同类型的另一个集合更新集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56042616/

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