Java 如何使用Lambda表达式将一组值从一个ArrayList添加到另一个ArrayList

Java 如何使用Lambda表达式将一组值从一个ArrayList添加到另一个ArrayList,java,Java,我必须通过将对象从一个数组列表添加到另一个数组列表来创建结果列表。这是我的代码 private List<MyObject> getObjectList(List<OtherObject> objects) { List<MyObject> resultList = new ArrayList<>(); for (int i = 0; i < objects.size(); i++) {

我必须通过将对象从一个数组列表添加到另一个数组列表来创建结果列表。这是我的代码

    private List<MyObject> getObjectList(List<OtherObject> objects) {
        List<MyObject> resultList = new ArrayList<>();
        for (int i = 0; i < objects.size(); i++) {
        MyObject object = new MyObject()
            object.setId(objects.get(i).getId());
            object.setText(objects.get(i).getTextValue());
            object.setUserId(objects.get(i).getUserName());
            object.setCreatedDate(objects.get(i).getCreateDateTime());

            resultList.add(object);
        }
        
        return resultList;
    }
如何通过使用lambda表达式实现这一点?

以下是一个示例:

私有列表getObjectListList对象{ List resultList=新建ArrayList; objects.forEachobj->{ MyObject对象=新的MyObject; object.setIdobj.getId; object.setTextobj.getTextValue; object.setUserIdobj.getUserName; object.SetCreatedDataObj.getCreateDateTime; resultList.addobject; }; 返回结果列表; } 以下是一个例子:

私有列表getObjectListList对象{ List resultList=新建ArrayList; objects.forEachobj->{ MyObject对象=新的MyObject; object.setIdobj.getId; object.setTextobj.getTextValue; object.setUserIdobj.getUserName; object.SetCreatedDataObj.getCreateDateTime; resultList.addobject; }; 返回结果列表; }
下面是使用方法引用的方法:

private List<MyObject> getObjectList(List<OtherObject> objects) {
    return objects.stream()
        .map(this::map)
        .collect(Collectors.toList());
}

private MyObject map(OtherObject otherObject) {
    MyObject object = new MyObject();
    object.setId(otherObject.getId());
    object.setText(otherObject.getTextValue());
    object.setUserId(otherObject.getUserName());
    object.setCreatedDate(otherObject.getCreateDateTime());
    return object;
}
以下是如何使用streams和lambda表达式执行此操作:

private List<MyObject> getObjectList(List<OtherObject> objects) {
    return objects.stream()
        .map(obj -> {
        MyObject object = new MyObject();
        object.setId(obj.getId());
        object.setText(obj.getTextValue());
        object.setUserId(obj.getUserName());
        object.setCreatedDate(obj.getCreateDateTime());
        return object;
    }).collect(Collectors.toList());
}

下面是使用方法引用的方法:

private List<MyObject> getObjectList(List<OtherObject> objects) {
    return objects.stream()
        .map(this::map)
        .collect(Collectors.toList());
}

private MyObject map(OtherObject otherObject) {
    MyObject object = new MyObject();
    object.setId(otherObject.getId());
    object.setText(otherObject.getTextValue());
    object.setUserId(otherObject.getUserName());
    object.setCreatedDate(otherObject.getCreateDateTime());
    return object;
}
以下是如何使用streams和lambda表达式执行此操作:

private List<MyObject> getObjectList(List<OtherObject> objects) {
    return objects.stream()
        .map(obj -> {
        MyObject object = new MyObject();
        object.setId(obj.getId());
        object.setText(obj.getTextValue());
        object.setUserId(obj.getUserName());
        object.setCreatedDate(obj.getCreateDateTime());
        return object;
    }).collect(Collectors.toList());
}
使用

等效于您的其他对象

导入java.time.LocalDateTime; 公共记录其他接收id, 字符串textValue, 字符串用户名, LocalDateTime createDateTime{ } 相当于你的MyObject

导入java.time.LocalDateTime; 公共记录MyRecordint id, 字符串文本, 字符串userId, LocalDateTime创建日期{ } 正在将OtherRec的列表复制到MyRecord

导入java.time.LocalDateTime; 导入java.util.List; 导入java.util.stream.collector; 公共类复制列表{ 公共静态无效字符串[]args{ List source=List.ofnewotherrec1,First,One,LocalDateTime.020,10,5,12,0, 新的OtherRec2,Second,Two,LocalDateTime.2020,10,5,13,0; 列表目标=source.stream .mapor->new MyRecordor.id,or.textValue,or.userName,or.createDateTime .toList; System.out.printlntarget; } } 使用

等效于您的其他对象

导入java.time.LocalDateTime; 公共记录其他接收id, 字符串textValue, 字符串用户名, LocalDateTime createDateTime{ } 相当于你的MyObject

导入java.time.LocalDateTime; 公共记录MyRecordint id, 字符串文本, 字符串userId, LocalDateTime创建日期{ } 正在将OtherRec的列表复制到MyRecord

导入java.time.LocalDateTime; 导入java.util.List; 导入java.util.stream.collector; 公共类复制列表{ 公共静态无效字符串[]args{ List source=List.ofnewotherrec1,First,One,LocalDateTime.020,10,5,12,0, 新的OtherRec2,Second,Two,LocalDateTime.2020,10,5,13,0; 列表目标=source.stream .mapor->new MyRecordor.id,or.textValue,or.userName,or.createDateTime .toList; System.out.printlntarget; } }
您的循环解决方案可以通过使用和使用生成器或构造函数来显著改进。使用lambda表达式,我想您的意思是使用?这是否回答了您的问题?在您的例子中,它不是一个直接的副本,因为您要映射到不同的元素类型,但基本原理是相同的。我会为MyObject编写一个接受其他对象的构造函数。使用构造函数可以显著改进循环解决方案,并使用生成器或构造函数使其更好。使用lambda表达式,我想您的意思是使用?这是否回答了您的问题?在您的例子中,它不是一个直接的副本,因为您要映射到不同的元素类型,但基本原理是相同的。我会为MyObject编写一个接受OtherObject的构造函数。如果要使用终止操作符forEach,则流是多余的。编辑为objects.forEach就足够了,但是,在流中改变外部状态仍然被认为是一种反模式;这最好通过归约来实现,或者在本例中,通过称为集合的特殊归约形式来实现。以下是一些详细信息:。如果您要使用终止运算符forEach,则流是冗余的。objects.forEach就足够了。编辑为objects.forEach,但仍然
,在流中改变外部状态被视为反模式;这最好通过归约来实现,或者在本例中,通过称为集合的特殊归约形式来实现。这里还有更多的信息:方法参考方法更具可读性;我会先展示它来鼓励它的使用。非常感谢。这是针对我的情况的完美解决方案;我会先展示它来鼓励它的使用。非常感谢。这是对我的情况的完美解决方案。