如何确定数组在Java中是否包含特定值?| Java Debug 笔记

93 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

提问:如何确定数组在Java中是否包含特定值?

我有一个String[]像这样的值:

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

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

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}


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块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️