Java 8将一个List的每个字段值映射到另一个相似的List [英] Java 8 map each field value of a List to another similar List

查看:1975
本文介绍了Java 8将一个List的每个字段值映射到另一个相似的List的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有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<User>有数据,我想使用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());

解决方案

您的编辑在逻辑上是正确的,我假设您想通过设置器进行操作,在这种情况下,请定义lambda正文并在其中执行操作...

>

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

I have 2 List of objects:

List<User>
List<UserResource>

For User class:

public class User {

    private int id;

    private String name;

    private String address; 

    **SETTERS & GETTERS**
}

For UserResource class:

public class UserResource {

    private String name;

    private String address; 

    **SETTERS & GETTERS**
}

My List<User> has data and i want to map value in name and address to UserResource's name and address, using java 8 stream and lambda, but i not sure how to do it.

Search online for quite sometime but not able to find similar question. Something like:

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

I tried something like following, but im not using constructor, not really sure how to fix it.

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

解决方案

Your edit is logically correct, I assume you want to do it via setters, in this case define a lambda body and perform the operations there...

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

这篇关于Java 8将一个List的每个字段值映射到另一个相似的List的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆