java - 从枚举类型中获取所有数据
问题描述
我有一个enum
named Product
,每个项目都覆盖它的抽象方法,它返回一个Manufacture
实例:
public enum Product {
FOO {
@Override
Manufacture getManufacture(){
return // a instance of Manufacture
}
}
BAR {
@Override
Manufacture getManufacture(){
return // another instance of Manufacture
}
}
abstract Manufacture getManufacture();
}
(Manufacture
是我创建的另一个类,但查看这个问题的详细信息并不重要)
问题 1:在另一个类中,我想Set<Manufactore>
从Product
枚举中获取一组制造 ()。Java 8 中最简单的方法是什么?
问题 2:aList<Manufacture>
呢?
问题3:如果可能的话,如何在枚举类中对问题1和2做同样的事情?
解决方案
Stream.of(Product.values()).map(Product::getManufacture)
返回Stream<Manufacture>
。现在你可以调用它了
.collect(Collectors.toSet())
要得到Set<Manufacture>
- 或
.collect(Collectors.toList())
得到List<Manufacture>
。
编辑:第三点
如果您想从枚举内部访问这些集合,您可以将它们存储在一些私有静态字段中并使用获取器。为了避免让客户修改这些集合,您可以每次在 getter 中返回它们的副本,例如通过,return new ArrayList(manufactureSet);
或者您可以使该集合不可变,然后像这样返回它
private static Set<Manufacture> manufacturers = Collections.unmodifiableSet(
Stream.of(values()).map(MyEnum::getManufacture).collect(Collectors.toSet())
);
public static Set<String> getManufacturers() {
return manufacturers;
}
推荐阅读
- android - 带有图像的推送通知问题(Windev Mobile Android)
- python - 未应用 Jupyter Notebook 上的 matplotlib 样式表
- html - 顶部的空白 + 链接不居中
- spring-boot - 无法确定类型:org.apache.http.client.CookieStore,表:帐户,列:[org.hibernate.mapping.Column(cookie)]
- html - 在相似页面之间导航时页面内容会略微水平跳跃
- javascript - 菜单中的正则表达式覆盖了我的 jquery 切换
- android - 即使在 wrap_content 中,TextView 也不完全可见
- postgresql - 如何使用查询在 Postgresql 中获取模式注释?
- woocommerce - Woocommerce:以编程方式向订单添加新的增值税行
- python-3.x - 将文件夹中不同文件类型的数据合并到 pandas DataFrame