Java 8将自定义元素添加到集合中的方法?

时间:2016-02-19 20:59:10

标签: java for-loop lambda java-8

是否有java 8方式执行以下操作?

for(int i;i<=100;i++){
    Person person=new Person();
    person.setId(i);
    person.setName("name"+i);
    list.add(person)
}

2 个答案:

答案 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