协慌网

登录 贡献 社区

如何确定数组是否包含 Java 中的特定值?

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

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

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

答案

Arrays.asList(yourArray).contains(yourValue)

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


您现在可以使用 Streams。

String[] values = {"AB","BC","CD","AE"};
boolean contains = Arrays.stream(values).anyMatch("s"::equals);

要检查intdoublelong数组是否包含值, LongStream分别使用IntStreamDoubleStreamLongStream

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

只是为了开始清除代码。我们已经(更正):

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)。

您可以使用Apache Commons Lang 中的 ArrayUtils.contains

public static boolean contains(Object[] array, Object objectToFind)

请注意,如果传递的数组为null ,则此方法返回false

还有适用于各种原始数组的方法。

例:

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

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