![](/img/trans.png)
[英]Java 8 Lambda Map<Integer,List<Object> for each create a new object and add this new objet in a list
[英]Dynamically modify the list to add new field in each object of the list
我有如下学生班级:-
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"
如果你使用同一个类
@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;
}
}
使用 ForEach
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;
}
您可以创建一个新的修改学生列表,并将它们添加到原始列表中,如下所示:
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);
这将保留原始列表并将修改后的学生添加到其中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.