java 动态修改列表,在列表的每个对象中添加新字段

ekqde3dh  于 2022-12-25  发布在  Java
关注(0)|答案(2)|浏览(213)

我有学生类如下:-

public class Student{
   private long id;
   private String name;
   private String school;

}

现在我有了DB的学生名单-

List<Student> students = apiService.getStudents();

我想动态修改这个列表,使它也包含id和name的组合作为一个单独的字段。

public class Student{
   private long id;
   private String name;
   private String school;
   private String idName;
}

我可以这样画-

students.stream().map(p -> p.getId() + ","+p.getName())).
        collect(Collectors.toSet());

但它不会保留原始列表。
所以不知道该怎么做。

原始列表-

id= 576, name = "Kevin", school = "ABC"
id= 577, name = "Varon", school = "DEF"

新列表-

id= 576, name = "Kevin", school = "ABC", idName= "576Kevin"
id= 577, name = "Varon", school = "DEF", idName= "577Varon"
nx7onnlm

nx7onnlm1#

如果你用的是同一个类

@Setter
@Getter
@ToString
static class Student{
    private long id;
    private String name;
    private String school;
    private String idName; //initially will be null

    public Student(long id, String name, String school) {
        this.id = id;
        this.name = name;
        this.school = school;
    }

}

用于每个

list.forEach(student -> student.setIdName(student.id+student.name));

或溪流

list.stream().forEach(student -> student.setIdName(student.id+student.name));

如果您有两个单独的类,一个有idName字段,另一个没有,如问题所示。

List<Student> list = Stream
        .of(new Student(1, "Sam", "School"),
            new Student(2, "Ronald", "School2"))
        .collect(Collectors.toList());

 //Create a List with StudentPOJO object having another field as idName
List<StudentPOJO> newList = list
.stream()
.map(student -> new StudentPOJO(student.id, student.name, student.school, student.id + student.name))

.collect(Collectors.toList());

类别
学生

@AllArgsConstructor
@Setter
@Getter
@ToString
static class Student{
    private long id;
    private String name;
    private String school;
}

学生POJO

@AllArgsConstructor
@Setter
@Getter
@ToString
static class StudentPOJO{
    private long id;
    private String name;
    private String school;
    private String idName;
}
hi3rlvi2

hi3rlvi22#

您可以创建已修改学生的新列表,并将其添加到原始列表中,如下所示:

List<Student> modifiedStudents = students.stream().map(s -> {
Student modifiedStudent = new Student();
modifiedStudent.setId(s.getId());
modifiedStudent.setName(s.getName());
modifiedStudent.setSchool(s.getSchool());
modifiedStudent.setIdName(s.getId() + "," + s.getName());
return modifiedStudent;
}).collect(Collectors.toList());
students.addAll(modifiedStudents);

这将保留原始列表并将修改的学生添加到其中。

相关问题