List<DocumentMetadata> 取所有docid,组成List<String>

List<DocumentMetadata> 提取所有 docid 组成 List<String>

假设 DocumentMetadata 类中有 getDocid() 方法或 docid 字段,以下是几种常见实现方式:

方法一:Stream API(推荐,Java 8+)

复制代码
复制代码
List<String> docIds = list.stream()
    .map(DocumentMetadata::getDocid)
    .collect(Collectors.toList());

完整示例

复制代码
复制代码
import java.util.*;
import java.util.stream.*;

class DocumentMetadata {
    private String docid;
    
    public DocumentMetadata(String docid) {
        this.docid = docid;
    }
    
    public String getDocid() {
        return docid;
    }
}

public class Example {
    public static void main(String[] args) {
        List<DocumentMetadata> list = Arrays.asList(
            new DocumentMetadata("doc1"),
            new DocumentMetadata("doc2"),
            new DocumentMetadata("doc3")
        );
        
        // 提取 docid
        List<String> docIds = list.stream()
            .map(DocumentMetadata::getDocid)
            .collect(Collectors.toList());
        
        System.out.println(docIds); // [doc1, doc2, doc3]
    }
}

方法二:传统 for 循环

复制代码
复制代码
List<String> docIds = new ArrayList<>();
for (DocumentMetadata doc : list) {
    docIds.add(doc.getDocid());
}

方法三:forEach + Lambda

复制代码
复制代码
List<String> docIds = new ArrayList<>();
list.forEach(doc -> docIds.add(doc.getDocid()));

方法对比

方法 代码简洁度 性能 推荐度
Stream API ⭐⭐⭐⭐⭐ ✅ 推荐
for 循环 ⭐⭐⭐ 最高 兼容性好
forEach ⭐⭐⭐⭐ 可选

进阶处理

1. 过滤 null 值

复制代码
复制代码
List<String> docIds = list.stream()
    .map(DocumentMetadata::getDocid)
    .filter(Objects::nonNull)
    .collect(Collectors.toList());

2. 去重

复制代码
复制代码
List<String> docIds = list.stream()
    .map(DocumentMetadata::getDocid)
    .distinct()
    .collect(Collectors.toList());

3. 过滤空字符串

复制代码
复制代码
List<String> docIds = list.stream()
    .map(DocumentMetadata::getDocid)
    .filter(s -> s != null && !s.isEmpty())
    .collect(Collectors.toList());

4. 转成不可变列表(Java 10+)

复制代码
复制代码
List<String> docIds = list.stream()
    .map(DocumentMetadata::getDocid)
    .collect(Collectors.toUnmodifiableList());

注意事项

  1. 空列表处理:如果原列表可能为 null,先判空

    复制代码
    复制代码
    List<String> docIds = list == null ? new ArrayList<>() : 
        list.stream().map(DocumentMetadata::getDocid).collect(Collectors.toList());
  2. 性能:数据量大时 Stream 性能略低于 for 循环,但差异很小

  3. 并行处理 :大数据量可用 parallelStream()

    复制代码
    复制代码
    List<String> docIds = list.parallelStream()
        .map(DocumentMetadata::getDocid)
        .collect(Collectors.toList());

✅ 最佳实践

复制代码
复制代码
// 推荐写法:简洁、安全、易读
List<String> docIds = Optional.ofNullable(list)
    .orElse(Collections.emptyList())
    .stream()
    .map(DocumentMetadata::getDocid)
    .filter(Objects::nonNull)
    .collect(Collectors.toList());

推荐使用 Stream API,代码简洁且功能强大!

相关推荐
Bruce_Liuxiaowei几秒前
Python 实例赋值遮蔽类属性:一个从不报错的静默陷阱
开发语言·python·语法糖
做运维的阿瑞8 分钟前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
why-geo14 分钟前
Hermes Agent 与 Python 的会产生什么样的碰撞
人工智能·python·ai编程
正经教主21 分钟前
【FDE系列】阶段2:Day 29:FastAPI 进阶 — Pydantic 模型与完整 CRUD 实战
人工智能·python·fde
gCode Teacher 格码致知25 分钟前
Pandas教学-6:coerce详解
python·pandas
梦在远山后30 分钟前
Electron 与 FastAPI 如何完成流式 Agent 对话
python·langchain·agent
kakakahahahaha33 分钟前
Windows Steam 游戏存档在哪里?定位和恢复排查流程
windows·其他·电脑·笔记本电脑·内容运营·软件需求
Xy-unu34 分钟前
Windows 开启外接显示器 HDR 后外接显示器无信号、无法扩展模式故障记录
windows
大衛說40 分钟前
12 · 文件 I/O 与序列化
python
小静AI工程实验室1 小时前
Python 爬虫中文乱码排查:严格解码、UTF-8 BOM 与 JSON 转义的 12 项实验
字符编码·爬虫·python