使用Lambda Expression将字符串列表转换为Java中的自定义对象列表

时间:2016-08-30 23:37:59

标签: java lambda java-8 java-stream

所以我有这样的事情:

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等进行各种操作,但无法使代码生效。

感谢。

2 个答案:

答案 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());