首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >整理越来越多的字符串数组并搜索它们

整理越来越多的字符串数组并搜索它们
EN

Code Review用户
提问于 2018-09-11 04:16:17
回答 1查看 48关注 0票数 0

这些字符串数组用于分类传入提要/消息是驱动程序提要还是团队提要。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static final String[] DRIVER_FEED_TYPES = {
        "SEBASTIAN_VETTEL", "LEWIS_HAMILTON", "CHARLES_LECLERC", "MAX_VERSTAPPEN",
};


private static final String[] TEAM_FEED_TYPES = {
        "FERRARI", "MERCEDES", "SAUBER", "REDBULL"
};

此方法通过传入消息获取提要的类型,并通过arrayContains方法确定相应的类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private boolean isFeedEnabled(FormulaOneMessage formulaOneMessage) {
    String feedType = formulaOneMessage.getFeedType();

    if (Helper.arrayContains(DRIVER_FEED_TYPES, feedType)) {
        return isDriverFeedEnabled();
    } else if (Helper.arrayContains(TEAM_FEED_TYPES, feedType)) {
        return isTeamFeedEnabled();
    } else {
        return false;
    }
}

arrayContains方法基本上是通过Object数组查看对象是否存在。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static boolean arrayContains(Object[] list, Object item) {
    for (Object s : list) {
        if (s.equals(item)){
            return true;
        }
    }

    return false;
}

所面临的挑战是如何管理类中越来越多的字符串数组类型。我应该把它做成地图、溪流还是灯笼?

另外,随着我继续添加更多的FEED_TYPES,if else语句也会增加。我应该继续使用它们吗?

总的来说,我希望改进这段代码的可维护性,看到未来提要类型的数量将继续增长。

EN

回答 1

Code Review用户

发布于 2018-09-11 07:43:05

当有意义时,应该使用Sets而不是数组和Enum。我会把它写成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enum FeedClass {
    TEAM, DRIVER, OTHER;
    private static final Set<String> DRIVER_FEED_TYPES = new HashSet<>(Arrays.asList(
            "SEBASTIAN_VETTEL", "LEWIS_HAMILTON", "CHARLES_LECLERC", "MAX_VERSTAPPEN"));

    private static final Set<String> TEAM_FEED_TYPES = new HashSet<>(Arrays.asList(
            "FERRARI", "MERCEDES", "SAUBER", "REDBULL"
    ));

    public FeedClass fromType(String feedType) {
        if (DRIVER_FEED_TYPES.contains(feedType)) {
            return DRIVER;
        } else if (TEAM_FEED_TYPES.contains(feedType)) {
            return TEAM;
        } else {
            return OTHER;
        }
    }
}

private boolean isFeedEnabled(FormulaOneMessage formulaOneMessage) {
    FeedType feedType = FeedClass.fromType(formulaOneMessage.getFeedType());
    switch (feedType.getClazz()) {
        case DRIVER:
            return isDriverFeedEnabled();
        case TEAM:
            return isTeamFeedEnabled();
        default:
            return false;
    }
}

驱动程序名称并不是真正需要硬编码的东西,您可能希望将其移到数据库或外部文件(S)。除非将if/switchisTeamFeedEnabled移动到enum中,否则不能真正避免isFeedEnabled()中的isDriverFeedEnabled,在代码中可能不可能干净地这样做。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/203544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文