【发布时间】:2018-01-29 18:37:50
【问题描述】:
我想使用 Java 流 将 ArrayList<String> 转换为 Set<ScopeItem>。
ScopeItem is a enum;
items is an ArrayList<String>;
Set<ScopeItem> scopeItems = items.stream()
.map(scopeString -> ScopeItem.valueOf(scopeString))
.filter(Objects::nonNull)
.collect(Collectors.toSet());
对于不在枚举中的字符串,会抛出以下内容:
java.lang.IllegalArgumentException: No enum const...
理想情况下,我想跳过任何不匹配的字符串。
我想可能是使用平面地图?有什么想法吗?
【问题讨论】:
-
您的列表是否可以包含与您的枚举不完全匹配的字符串,它们之间的增量是多少?
-
@Makoto 是的,这就是问题所在。我希望它能够处理不匹配的字符串(通过简单地忽略它们)。我不确定您所说的它们之间的增量是什么意思?它应该完全匹配,区分大小写等
-
假设你可以改变
ScopeItem的实现,我建议adding a contains() method to your enumeration -
我的意思是你有一个不完整的错误信息。如果你得到一个枚举值“foobasdfkj1236798723”,而你显然不支持它,这就引出了这些值首先来自哪里的问题。
-
另外,根据您的
ScopeItems 的用途,您实际上可能希望它尽快“炸毁”,因为默默地忽略值可能是真正微妙错误的根源。所以,也许只是将默认异常转换为更有用的信息。