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

如何根据指定枚举类过滤String列表,保留匹配元素?

解决方案

首先修正枚举类的语法错误(原代码里class Enum Type是错误写法,正确的枚举定义是enum Type),同时给枚举类添加辅助方法,方便后续过滤操作:

enum Type {
    WIN("window"),
    DOOR("door");

    private final String type;

    Type(String type) {
        this.type = type;
    }

    // 获取所有枚举对应的字符串值集合
    public static Set<String> getAllValidTypes() {
        return Arrays.stream(Type.values())
                     .map(Type::getType)
                     .collect(Collectors.toSet());
    }

    public String getType() {
        return type;
    }
}

接下来利用Java 8+的Stream API对String列表进行过滤:

import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class FilterDemo {
    public static void main(String[] args) {
        List<String> matType = Arrays.asList("window","door","room","kitchen","bedroom");
        Set<String> validTypes = Type.getAllValidTypes();

        // 过滤出仅匹配枚举值的元素
        List<String> filteredList = matType.stream()
                                           .filter(validTypes::contains)
                                           .collect(Collectors.toList());

        System.out.println(filteredList); // 输出: [window, door]
    }
}

替代实现(无需提前生成集合)

如果不想额外生成Set集合,也可以直接在过滤逻辑中遍历枚举判断匹配:

List<String> filteredList = matType.stream()
                                  .filter(str -> Arrays.stream(Type.values())
                                                       .anyMatch(type -> type.getType().equals(str)))
                                  .collect(Collectors.toList());

注意细节

  • 枚举的构造方法默认是私有,无需手动加private修饰符
  • 将枚举的type字段设为final,避免被意外修改
  • 使用Set存储枚举值的字符串形式,判断存在性的效率比每次遍历枚举更高(枚举值较多时更明显)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:03:09