当前位置: 首页 > 知识库问答 >
问题:

使用流返回枚举中包含的给定字符串列表的枚举数组

楚良平
2023-03-14

我有一个类似这样的字符串枚举:

public enum SomeEnum {

  STRING1("some value"),
  STRING2("some other value");
  STRING3("some third value");

  ...more strings...

  private String name;

  SomeEnum(String name) {
    this.name = name;
  }

  @Override
  public String toString() {
    return name;
  }

我有一个包含一些字符串的列表。

我想迭代someStringList并为它找到相应的枚举。

例如:列表包含字符串“一些值”和“一些第三个值”,然后我想使用JavaStream-API返回一个包含SomeEnum.STRING1和SomeEnum.STRING3的列表

不知何故,我无法让它工作。我尝试了这样的事情:

    List<SomeEnum> enumList = Stream.of(someStringList).forEach( s -> Stream.of(SomeEnum.values()).filter(w -> w.toString().equalsIgnoreCase(s)).collect(Collectors.toList()));

但这不会编译,因为它不会返回任何内容。有什么想法吗?

共有2个答案

顾琛
2023-03-14
匿名用户

建立从字符串到相应的< code>SomeEnum值的映射:

Map<String, SomeEnum> map = 
    Arrays.stream(SomeEnum.values()).collect(toMap(SomeEnum::toString, s -> s));

(这可以完成一次并存储)

那么你可以看看这个:

List<SomeEnum> enumList = someStringList.stream().map(map::get).collect(toList());

(您可能希望也可能不希望处理在映射中找不到字符串的情况:例如,您可以引发异常或删除此类元素)。

柴坚诚
2023-03-14

在你的某个世界中,你可以建立一个地图

private static final Map<String, SomeEnum> stringToEnum = Arrays.stream(values())
    .collect(Collectors.toMap(SomeEnum::toString, e -> e));

public static SomeEnum fromString(String name) {
    return stringToEnum.get(name);
}

然后在客户端代码中使用它。这是它的样子。

List<SomeEnum> enumList = someStringList.stream()
    .map(SomeEnum::fromString)
    .collect(Collectors.toList());

 类似资料:
  • 问题内容: 这是我的问题-我正在寻找(如果存在的话)等效于的枚举。 这是我的代码问题的一个示例: 现在,我意识到,使用of 是最好的方法,但是我必须通过其他地方的开关/案例来运行我的枚举内容。因此,我的问题。 假设这样的事情不存在,我该怎么做呢? 问题答案: 应该这样做: 这样,您不必担心以后再添加其他枚举值,它们都已选中。 编辑: 如果枚举很大,则可以将值粘贴在HashSet中: 然后,您可以做

  • 我用一些字符串作为属性的常量创建了一个枚举。每个常数中字符串的数量都不一样,所以我使用了varargs(第一次这样做)。这是我的枚举: 现在我想要能够键入类似的内容:

  • 我需要序列化/反序列化一个POJO包含一个特殊枚举(不是字符串的枚举)。我找到了很多字符串枚举的示例,但不是我的情况。 而不是: {“代码”:“20”,“消息”:“无效的URL参数值”,“说明”:“缺少应用程序标识符”} 编辑1 但我的结果是: 现在,我希望将改为

  • 例如,我如何做类似的事情: 结果示例:

  • 本文向大家介绍C#枚举到字符串并返回,包括了C#枚举到字符串并返回的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 因此,进一步寻找,我发现这个人有一个解决方案:typescript中基于字符串的枚举的解决方案 这将允许像这样的东西工作: 唯一的回应基本上是说这样做是不安全的。(但我应该说,它确实起作用了--我可以键入eventtype.dot...Atom editor给了我5个大小写选项可供选择(保持代码中的内容一致),然后我可以使用它将字符串值吐出来,给我的用户一个很好的填充空间的体验,将来我可以更改枚举