【问题标题】:Java 8 map each field value of a List to another similar ListJava 8 将 List 的每个字段值映射到另一个类似的 List
【发布时间】:2017-07-06 14:55:46
【问题描述】:

我有 2 个对象列表:

List<User>
List<UserResource>

对于User 类:

public class User {

    private int id;

    private String name;

    private String address; 

    **SETTERS & GETTERS**
}

对于UserResource 类:

public class UserResource {

    private String name;

    private String address; 

    **SETTERS & GETTERS**
}

我的List&lt;User&gt; 有数据,我想使用 java 8 流和 lambda 将 nameaddress 中的 映射到 UserResourcenameaddress ,但我不知道该怎么做。

在网上搜索了一段时间,但找不到类似的问题。比如:

List<User> users = **data inserted**
List<UserResource> resources = users.forEach(u ->{
    u.setName(users.getName());
    u.setAddress(users.getAddress());
});

我尝试了类似以下的方法,但我没有使用构造函数,不确定如何修复它。

List<UserResource> userResources = users.stream().map(u -> new UserResource(u.getName(), u.getAddress())).collect(Collectors.toList());

【问题讨论】:

  • 尝试一些涉及forEach...
  • 是的,是的!我知道我们可以用streammap 做一些事情,但我不确定该怎么做。
  • 参见the tutorialpackage documentation。后者在“可变缩减”部分中有一个示例,只需对您的用例进行少量调整……
  • @hades 你必须先自己尝试一下。如果遇到问题,可以作为问题提出。
  • 你的编辑是正确的......什么不起作用?你想通过 setter 来做吗?

标签: lambda java-8 java-stream


【解决方案1】:

你的编辑在逻辑上是正确的,我假设你想通过 setter 来做,在这种情况下定义一个 lambda body 并在那里执行操作......

.map(u -> { 
     UserResource ur = new UserResource();
     ur.setName(u.getName());
     ur.setAddress(u.getAddress());
     return ur;
 }).collect(...)

【讨论】:

  • 是的!这就是我的意思,不知道可以这样做,谢谢
猜你喜欢
  • 1970-01-01
  • 2022-12-17
  • 2014-12-12
  • 2017-08-29
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多