问题

我有一个String [],其值如下:

public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};

鉴于String s,是否有一种测试VALUES是否包含s的好方法?


#1 热门回答(2387 赞)

Arrays.asList(yourArray).contains(yourValue)

警告:这对于基元数组不起作用(请参阅注释)。

##自java-8以来

您现在可以使用Stream来检查int,double或long的数组是否包含一个值(分别使用IntStream,DoubleStream或LongStream)

##例子

int[] a = {1,2,3,4};
boolean contains = IntStream.of(a).anyMatch(x -> x == 4);

#2 热门回答(302 赞)

只需清除代码即可开始使用。我们已经(更正):

public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};

这是一个可变的静态FindBugs会告诉你很淘气。它应该是私人的:

private static final String[] VALUES = new String[] {"AB","BC","CD","AE"};

(注意,你实际上可以放弃new String [];位)。

所以,引用数组是不好的,特别是在这里我们需要一个集合:

private static final Set<String> VALUES = new HashSet<String>(Arrays.asList(
     new String[] {"AB","BC","CD","AE"}
));

(偏执狂的人,比如我自己,如果把它包裹在Collections.unmodifiableSet中,它可能会感到更放心 - 它甚至可以公之于众。)

“给定String,是否有一种测试VALUES是否包含s的好方法?”

VALUES.contains(s)

O(1)。


#3 热门回答(169 赞)

你可以使用Apache Commons LangArrayUtils.contains
 public static boolean contains(Object [] array,Object objectToFind)
请注意,如果传递的数组为null,则此方法返回false。

也有可用于各种原始数组的方法。

###例子:

String[] fieldsToInclude = { "id", "name", "location" };

if ( ArrayUtils.contains( fieldsToInclude, "id" ) ) {
    // Do some stuff.
}

原文链接