简体   繁体   中英

Replace lambda with method reference containing new keyword

List<Employee> empListObjDeepCopy = empListRef.stream().map(inv -> new Employee(inv)).collect(Collectors.toList());

How to replace this (inv -> new Employee(inv)) lambda with Method reference.

Full Code reference:

package org.learn.copy;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class DeepCopy {
    public static void main(String[] args){
        Employee emp = new Employee();
        emp.setName("Hello");
        emp.setRollNumber("12345");

        Employee emp1 = new Employee();
        emp1.setName("Hi");
        emp1.setRollNumber("123456");

        List<Employee> empList = new ArrayList<>();
        empList.add(emp);
        empList.add(emp1);

        List<Employee> empListRef = empList;

        System.out.println("empList Obj: "+empList.get(0).getName());
        System.out.println("empListRef Obj: "+empListRef.get(0).getName());

        List<Employee> empListObjDeepCopy = empListRef.stream().map(inv -> new Employee(inv)).collect(Collectors.toList());

        empListObjDeepCopy.get(0).setName("Hi");

        System.out.println("empList Obj: "+empList.get(0).getName());
        System.out.println("empListRef Obj: "+empListRef.get(0).getName());
        System.out.println("empListObjDeepCopy Obj: "+empListObjDeepCopy.get(0).getName());
    }
}

class Employee {
    private String name; 
    private String rollNumber;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getRollNumber() {
        return rollNumber;
    }
    public void setRollNumber(String rollNumber) {
        this.rollNumber = rollNumber;
    }
    public Employee(Employee employee) {
        this.name = employee.name;
        this.rollNumber = employee.rollNumber;
    }
    public Employee() {
        super();
    }   
}

Using .map(Employee::new) is ambiguous because you have two constructors in your Employee class. Try to leave only one.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM