我如何测试数组是否包含某个值?
我有一个String[]
,其值如下所示:
public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
给定String s
,是否有一种测试VALUES
是否包含s
的好方法?
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);
只需清除代码即可开始使用。 我们已经(更正):
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.
}
链接地址: http://www.djcxy.com/p/13833.html