如何用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
相关产品推荐
相关产品推荐

