How to use BiConsumer to accept an object having an object, list of strings, and variables?

会有一股神秘感。 提交于 2021-01-01 09:23:09

问题


I am trying to use BiConsumer to accept an object that contains variables, an object and a list of strings in Java. I am not sure how to set the values into one object if using just BiConsumer. Maybe, if I tried to wrap Student object in a List and pass it into a new Student might help, but so far I get a null object. I haven't seen a lot of post with object containing just variables in one object and using BiConsumer.

@Test
public void testStudent() {
    List<Object> objectList1 = new ArrayList<>();
    Student student = new Student();

    StudentLevel studentLevel = new StudentLevel("freshman", true);
    List<String> studentLists = Arrays.asList("Maria", "Jose", "Juan");
    Student student1 = new Student("Maria", "Lopez", "A", studentLevel, studentLists);
    objectList1.add(student1);

    BiConsumer<Object, List<Object>> biconsumer = (obj, list) -> {
      for (Object object: list) {
        // set and get but how?
        // obj = object;
      }
    };

    // To accept values from the object list see below for desired output
    biconsumer.accept(student, objectList1); 
    
    // For debugging purpose
    System.out.println("All Student: " + student);
}

public class Student {

    private String name;
    private String lastName;
    private String grade;
    private StudentLevel studentGrade;
    private List<String> studentList;

    public Student(final String name, final String lastName, final String grade, final StudentLevel studentGrade, final List<String> studentList) {
        this.name = name;
        this.lastName = lastName;
        this.grade = grade;
        this.studentGrade = studentGrade;
        this.studentList = studentList;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public StudentLevel getStudentGrade() {
        return studentGrade;
    }

    public void setStudentGrade(StudentLevel studentGrade) {
        this.studentGrade = studentGrade;
    }

    public List<String> getStudentList() {
        return studentList;
    }

    public void setStudentList(List<String> studentList) {
        this.studentList = studentList;
    }
}
public class StudentLevel {

    private String level;
    private Boolean pass;

    public StudentLevel(final String level, final Boolean pass){
        this.level = level;
        this.pass = pass;
    }

    public String getLevel() {
        return level;
    }

    public void setLevel(String level) {
        this.level = level;
    }

    public Boolean getPass() {
        return pass;
    }

    public void setPass(Boolean pass) {
        this.pass = pass;
    }
}

Desired output:

student = {Student@887} 
  name = "Maria"
  lastName = "Lopez"
  grade = "A"
  studentGrade = {StudentLevel@889} 
    level = "freshman"
    pass = {Boolean@906} true
  studentList = {Arrays$ArrayList@890}  size = 3
    0 = "Maria"
    1 = "Jose"
    2 = "Juan"

回答1:


You are assigning local reference of object to obj (won't copy the values)

obj = object; // means, student = object

no change will be reflected outside the scope of the consumer, instead, you need to modify the state using setters as:

((Student) obj).setName(((Student) object).getName());
obj = object; // after this point, student object won't be accessible in the current scope.

Note: You should have getters and setters to access private properties outside Student class, and this example just demonstrates the working by assigning name property.

Reference:

• Classes and Object



来源:https://stackoverflow.com/questions/65280525/how-to-use-biconsumer-to-accept-an-object-having-an-object-list-of-strings-and

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!