You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java Streams实现ArrayList转Vector及List<Person>转Vector<PersonName>?

能否用Java Streams将List转换为Vector?

当然可以!Java Streams API完全支持这种跨类型的集合转换,实现思路清晰又简洁,核心就是映射类型+指定收集容器两步走。我给你一步步演示:

先明确类结构(示例)

首先假设你的Person和PersonName类大概是这样的(你可以根据实际业务调整):

// 源对象类
class Person {
    private String firstName;
    private String lastName;

    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    // 必要的getter方法
    public String getFirstName() { return firstName; }
    public String getLastName() { return lastName; }
}

// 目标对象类
class PersonName {
    private String fullName;

    public PersonName(String fullName) {
        this.fullName = fullName;
    }

    // 可选:重写toString方便测试输出
    @Override
    public String toString() { return fullName; }
}

核心转换代码

接下来就是用Streams完成转换的核心逻辑:

import java.util.List;
import java.util.Vector;
import java.util.stream.Collectors;

public class PersonConversionDemo {
    public static void main(String[] args) {
        // 模拟原始的Person列表
        List<Person> personList = List.of(
            new Person("Alice", "Smith"),
            new Person("Bob", "Johnson"),
            new Person("Charlie", "Brown")
        );

        // 关键转换步骤
        Vector<PersonName> personNameVector = personList.stream()
            // 第一步:把每个Person对象映射成PersonName
            // 转换逻辑可自定义,比如只取firstName,或者拼接其他字段
            .map(person -> new PersonName(person.getFirstName() + " " + person.getLastName()))
            // 第二步:将Stream结果收集到Vector中
            .collect(Collectors.toCollection(Vector::new));

        // 测试输出验证结果
        personNameVector.forEach(System.out::println);
    }
}

关键细节解释

  • map()操作:这是类型转换的核心,你可以在这里定义任意从Person到PersonName的转换规则。比如如果PersonName有接收firstName和lastName的构造器,直接改成new PersonName(person.getFirstName(), person.getLastName())即可,完全灵活适配你的类结构。
  • Collectors.toCollection(Vector::new):默认的Collectors.toList()会返回ArrayList,而这个收集器可以指定我们想要的容器类型——直接传入Vector的构造方法引用,就能把处理后的元素直接存入新的Vector实例。
  • 空值处理(可选):如果原始personList中可能存在null元素,建议在map()前加上过滤逻辑避免空指针异常:
    .filter(Objects::nonNull) // 过滤掉null的Person对象
    

内容的提问来源于stack exchange,提问作者Prasad Pande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:07:39