如何确定数组是否包含 Java 中的特定值?
我有一个这样的值:String[]
public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
给定,有没有一个好方法来测试是否包含?String s
VALUES
s
我有一个这样的值:String[]
public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
给定,有没有一个好方法来测试是否包含?String s
VALUES
s
Arrays.asList(yourArray).contains(yourValue)
警告:这不适用于基元数组(请参阅注释)。
String[] values = {"AB","BC","CD","AE"};
boolean contains = Arrays.stream(values).anyMatch("s"::equals);
要检查 的数组 或 是否包含值,请分别使用 或。int
double
long
IntStream
DoubleStream
LongStream
int[] a = {1,2,3,4};
boolean contains = IntStream.of(a).anyMatch(x -> x == 4);
引用数组不正确。对于这种情况,我们追求一个集合。自 Java SE 9 以来,我们有 .Set.of
private static final Set<String> VALUES = Set.of(
"AB","BC","CD","AE"
);
“给定字符串 s,有没有一种好方法来测试 VALUES 是否包含 s?”
VALUES.contains(s)
O(1).
正确的类型,不可变,O(1)和简洁。美丽。
只是为了从一开始就清除代码。我们已经(已更正):
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
(*为了在品牌上做得更多一点,可以预见的是,集合API仍然缺少不可变的集合类型,语法仍然太冗长,不符合我的口味。