所以我有这样的事情:
List<String> persons = Arrays.asList("Tom","Harry", "Steve");
我想使用Lambda表达式将其转换为List<Person>
。
假设Person是以下类:
class Person {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
我一直在尝试使用forEach,map等进行各种操作,但无法使代码生效。
感谢。
答案 0 :(得分:4)
如果你在Person
类中添加一个带有字符串的构造函数,你可以使用:
List<Person> people = persons.stream()
.map(Person::new)
.collect(Collectors.toList());
如果你没有构造函数,那么你将需要一个lambda:
List<Person> people = persons.stream()
.map(s -> { Person p = new Person(); p.setName(s); return p; })
.collect(Collectors.toList());
答案 1 :(得分:1)
首先,您最好修改Person
类,添加另一个传递名称的构造函数。
public class Person {
public Person() {}
public Person(String name) { this.name = name; }
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
之后,只需执行此代码:
List<String> persons = Arrays.asList("Tom","Harry", "Steve");
List<Person> result = persons
.stream()
.filter(name -> name != null) // logical expression to remove invalid elements of the result collection
.map(name -> new Person(name))
.collect(Collectors.toList());