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

如何用Java Stream从对象列表中提取TypeB列表?

解决Java Stream提取类public字段列表的问题

可以实现,问题大概率出在字段定义语法错误或访问权限限制上,以下是具体解决步骤:

1. 修正Types类的字段定义

你给出的Types类代码存在语法错误,public关键字后必须指定变量名(即使变量名和类型名相同,语法上允许但不推荐),正确的定义示例:

class Types {
    public TypeA typeA; // 明确变量名,比如typeA
    public TypeB typeB; // 明确变量名,比如typeB
}

如果你的字段名确实是TypeB(不建议和类型同名),则保持字段名即可,但必须确保字段存在。

2. 确认类的访问权限

如果你的Stream代码和Types类不在同一个包下,需要将Types类改为public修饰,否则跨包无法访问其public字段:

public class Types {
    public TypeA typeA;
    public TypeB typeB;
}

3. 正确的Stream写法

当字段定义合法且权限允许时,你的Stream代码可以正常运行,只需确保字段名正确:

List<TypeB> typeBs = allTypes.stream()
                             .map(t -> t.typeB) // 替换为实际的字段名
                             .collect(Collectors.toList());

额外建议(最佳实践)

虽然直接访问public字段可以实现需求,但Java的封装性原则建议将字段设为private,并添加getter方法:

public class Types {
    private TypeA typeA;
    private TypeB typeB;

    public TypeB getTypeB() {
        return typeB;
    }
}

此时Stream代码可简化为方法引用形式:

List<TypeB> typeBs = allTypes.stream()
                             .map(Types::getTypeB)
                             .collect(Collectors.toList());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:40:59