【问题标题】:Comparing a String against values in a List<Integer>将字符串与 List<Integer> 中的值进行比较
【发布时间】:2021-01-08 23:24:58
【问题描述】:

我有两个值,5 和 6,它们都是整数,它们是 ArrayList 的一部分。我还有另一个具有字符串输入的布尔方法,我必须比较该字符串的值并遍历该列表并查看该值是否与该列表中的元素匹配。如果匹配,那么我应该返回 true,否则返回 false。目标是查看我的值是否与列表中的值之一匹配。 该列表是常量类的一部分,我在 Validator 类中有我的方法。以下是我的代码:

常量.java:

public static final List<Integer> TYPES = new ArrayList<Integer> (Arrays.asList(5,6));

Validator.java:

public static boolean isPromoTypeFormatValid (String value) {
    value = Util.getTrimmedValue(value);
    int intValue = Integer.valueOf(value);
    List <Integer> promoTypeList = scpduuConstants.PROMO_TYPES;
    for(int i = 0; i < promoTypeList.size(); i++) {
        if (promoTypeList.contains(intValue)) {
            return true;
        }
    }
    return false;
}

有没有更好的方法来做到这一点,当它是一个整数时,我会在比较 String 值和 ArrayList 值时遇到问题吗?我对此有点陌生,但试图找出最有效的方法。如有任何建议,请告诉我。

【问题讨论】:

  • typesList.contains(value) 正在根据您的代码处理不兼容的类型。编译器不会抱怨,但比较会失败。
  • 包含使用equals 方法。字符串永远不会等于整数,您首先需要使用 Integer.valueof 将字符串转换为整数
  • @oleg 注意!我已经修改了帖子以显示这一点。我只是想知道修剪字符串值的效率是什么,然后使用 Integer.valueOf() 方法设置另一个保存该字符串的 int 值的变量,然后遍历列表以查看我的新 intValue 是否为包含在列表中。有什么办法可以清理吗?
  • 你的代码会这样工作。但是您应该检查Integer.valueOf() 是否抛出NumberFormatException。我想在这种情况下你也想返回false
  • 如果使用contains方法检查intValue是否在列表中,则不需要循环;如果该值不在列表中,则会发生多次冗余调用。

标签: java string list arraylist contains


【解决方案1】:

也许这有点帮助:

public static final List<Integer> TYPES = new ArrayList<Integer>(Arrays.asList(5, 6));

public static void main(String[] args) {

    final String value = "5";

    checkValue(value);

}

public static boolean checkValue(String value) {

    final var valueAsInt = Integer.parseInt(value.trim());
    
    return TYPES.contains(valueAsInt);

}

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 2016-07-22
    • 2018-02-08
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多