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

使用Lambda表达式将Java中的字符串列表转换为自定义对象列表,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,所以我有这样的想法: List<String> persons = Arrays.asList("Tom","Harry", "Steve"); 我一直在用forEach、map等尝试各种方法,但无法让代码正常工作 谢谢。如果您在Person类中添加了一个接受字符串的构造函数,您只需使用: List<Person> people = persons.stream() .map(Person::new) .collect(Collectors.toList

所以我有这样的想法:

List<String> persons = Arrays.asList("Tom","Harry", "Steve");
我一直在用forEach、map等尝试各种方法,但无法让代码正常工作


谢谢。

如果您在
Person
类中添加了一个接受字符串的构造函数,您只需使用:

List<Person> people = persons.stream()
    .map(Person::new)
    .collect(Collectors.toList());
List people=persons.stream()
.map(个人::新建)
.collect(Collectors.toList());
如果没有构造函数,则需要lambda:

List<Person> people = persons.stream()
    .map(s -> { Person p = new Person(); p.setName(s); return p; })
    .collect(Collectors.toList());
List people=persons.stream()
.map(s->{Person p=new Person();p.setName;返回p;})
.collect(Collectors.toList());

首先最好修改
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 persons=Arrays.asList(“汤姆”、“哈里”、“史蒂夫”);
名单结果=人
.stream()
.filter(name->name!=null)//删除结果集合中无效元素的逻辑表达式
.map(姓名->新人(姓名))
.collect(Collectors.toList());

完美!!这很有效,非常感谢:)我早就看到了。这不是一个重复的问题。这是另一种情况,因为Person是无法更改的第三方类。所以,我需要创建lambda的建议。事实上,我不能改变人。把它看作是由第三方供应商提供的东西。但是谢谢,我会将这些知识用于其他用例。但是如果您不能修改
Person
类,您必须再编写一点代码。我认为如果
null
作为一个值提供,则不应该将其从列表中悄悄删除,除非方法调用方期望该行为。把这种逻辑放在流程中也是不合适的。空值检查应该由
Person
类完成,首先假设
null
Person
是无效的名称。@4castle这一切都取决于您想做什么,这段代码只是我们可以对流执行的一个示例,它可以是任何逻辑表达式。
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;
    }
}