是否有java 8方式执行以下操作?
for(int i;i<=100;i++){
Person person=new Person();
person.setId(i);
person.setName("name"+i);
list.add(person)
}
答案 0 :(得分:7)
您可以通过将每个int
从0到100映射到Person
来获取人员列表。
List<Person> persons = IntStream.rangeClosed(0, 100).mapToObj(i -> {
Person person = new Person();
person.setId(i);
person.setName("name" + i);
return person;
}).collect(Collectors.toList());
然后,您可以将persons
列表附加到现有列表中。
IntStream.rangeClosed
返回原始IntStream
的{{1}}。每个都使用mapToObj
映射到对象int
,并收集到Collectors.toList()
的列表中。
如果你有Person
的构造函数获取id和名称,那将会更清晰。使用这样的构造函数,您可以编写:
Person
答案 1 :(得分:4)
是:
IntStream.rangeClosed(0, 100)
.forEach(i -> {
Person person=new Person();
person.setId(i);
person.setName("name"+i);
list.add(person);
});
修改强>
如下所述,访问流操作的lambda表达式参数中的现有列表与函数编程相反。最好这样做:
List<Person> persons = IntStream.rangeClosed(0, 100)
.mapToObj(i -> {
Person person=new Person();
person.setId(i);
person.setName("name" + i);
return person;
})
.collect(Collectors.toList());
请参阅https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html。