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

Java8 Stream:如何在单流中映射Model类的两个属性

嘿,我来帮你搞定这个Stream转换的问题!你一开始用mapFirst的思路不对哦——mapFirst只会处理流里的第一个元素,提取它的stringA,这显然没法帮你收集所有Model里的stringA和stringB。

要实现把每个Model的两个字符串属性都收集到同一个List里,最适合的Stream操作是**flatMap**,它能把每个元素映射成多个元素的流,再把所有流合并成一个单一的流。具体代码如下:

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

// 你的Model类保持不变
class Model {
    private String stringA;
    private String stringB;
    public Model(String stringA, String stringB) {
        this.stringA = stringA;
        this.stringB = stringB;
    }
    public String getStringA() { return stringA; }
    public String getStringB() { return stringB; }
}

// 完整转换逻辑
List<String> strings = models.stream()
    .flatMap(model -> Stream.of(model.getStringA(), model.getStringB()))
    .collect(Collectors.toList());

简单解释一下:

  1. flatMap(model -> Stream.of(model.getStringA(), model.getStringB())):把每个Model对象转换成一个包含它的stringA和stringB的小Stream;flatMap会自动把所有这些小Stream合并成一个连续的Stream<String>。
  2. collect(Collectors.toList()):把最终的流收集成List<String>。

如果你的Model属性可能存在null值,还可以加上过滤步骤,避免把null放进结果List里:

import java.util.Objects;

List<String> strings = models.stream()
    .flatMap(model -> Stream.of(model.getStringA(), model.getStringB()))
    .filter(Objects::nonNull) // 过滤掉null元素
    .collect(Collectors.toList());

这样就能一次性完成所有属性的收集啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:51:02