首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java 8流从另一个不同类型的集合更新集合

使用Java 8流从另一个不同类型的集合更新集合
EN

Stack Overflow用户
提问于 2019-05-08 14:01:50
回答 2查看 880关注 0票数 1

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

代码语言:javascript
复制
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>。如果该集合中有任何UserDetailsuserId字段与用户列表中的任何User#id值相匹配,则需要用UserDetail集中同名的字段更新相应的User#moniker

我能够用“旧”方式(前Java 8流/集合API)这样做:

代码语言:javascript
复制
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来做到这一点呢?也就是说,如何循环两个集合,对于任何具有匹配in的元素,都可以使用来自UserDetailsUserDetails值来更新Users中的moniker值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-08 14:12:06

如果将userDetails放在映射中,性能明智会更好。

代码语言:javascript
复制
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()));
});
票数 1
EN

Stack Overflow用户

发布于 2019-05-08 17:10:44

因为您的userId依赖于moniker参数。因此,我已经实现了同时使用流和高级for循环。你可以看一眼。你的问题既棘手又有趣。

  1. 第一步 if(user.getId().equals(userdetail.getUserId())){ ().forEach(System.out::println);userdetails.stream().forEach(用户:用户){userdetails.stream user.setMoniker(userdetail.getMoniker();});System.out.println(“*”);users.stream().forEach(System.out::println);
  2. 方法二 公共静态列表用户= getUserList();公共静态空main(String[] args) { Set userdetails = getUserDetails();users.stream().forEach(System.out::println);//注: CompareUpdateList是我的类.forEach System.out.println的名称(“*}公共静态空updateUser(UserDetail用户详细信息){for(用户:用户){userdetail.getMoniker user.setMoniker(userdetail.getMoniker();}})
  3. 第三种方法 公共静态列表用户= getUserList();公共静态空main(String[] args) { Set userdetails = getUserDetails();users.stream().forEach(System.out::println);//注: CompareUpdateList是我的类.forEach System.out.println的名称(“*”);if(user.getId().equals(userdetail.getUserId())){ () users.stream().forEach(System.out::println);}公开静态空洞updateUser(UserDetail用户详细信息){ users.stream().forEach(user->{ user.setMoniker(userdetail.getMoniker);});}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56042616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档