本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
提问:如何确定数组在Java中是否包含特定值?
我有一个String[]像这样的值:
public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
给定String s,有没有一种很好的方法来测试是否VALUES包含s?
高分回答:
Arrays.asList(yourArray).contains(yourValue)
警告:这不适用于图元数组(请参见注释)。 自从 Java-8 您现在可以使用流。
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的简要更新
引用数组是错误的。对于这种情况,我们要紧紧追赶。从Java SE 9开始,我们有了Set.of。
private static final Set<String> VALUES = Set.of(
"AB","BC","CD","AE"
);
“给出String,是否有测试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-甚至可以将其公开。)
(*要进一步了解品牌,Collections API仍会缺少不可变的collection类型,并且就我的口味而言,语法仍然过于冗长。)
文章翻译自 am2dgbqfb6mk75jcyanzabc67y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/1…
作者建议:学好流anyMatch!!
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️