Java,Simplified检查int数组是否包含int



5 Answers

这是因为Arrays.asList(array)返回List<int[]>array参数被视为要包装的一个值(获取整数数组的列表),而不是vararg。

请注意,它确实适用于对象类型(不是基元):

public boolean contains(final String[] array, final String key) {
    return Arrays.asList(array).contains(key);
}

甚至:

public <T>  boolean contains(final T[] array, final T key) {
    return Arrays.asList(array).contains(key);
}

但你不能有List<int>并且autoboxing在这里不起作用。

Question

基本上我的伙伴一直说我可以通过使用不同的方式检查int数组是否包含int来缩短我的代码,尽管他不会告诉我它是什么:P。

当前:

public boolean contains(final int[] array, final int key) {
    for (final int i : array) {
        if (i == key) {
            return true;
        }
    }
    return false;
}

也试过这个,虽然它总是因某种原因返回false。

public boolean contains(final int[] array, final int key) {
    return Arrays.asList(array).contains(key);
}

任何人都可以帮我吗?

谢谢。




这在java 8中有效

public static boolean contains(final int[] array, final int key)
{
return Arrays.stream(array).anyMatch(n->n==key);
}



我知道这是最晚的,但尝试Integer[]而不是int[]




您可以使用java.util.Arrays类来使用contains方法转换List<T>对象中的数组T[?]

Arrays.asList(int[] array).contains(int key);



这是Java 8解决方案

public static boolean contains(final int[] arr, final int key) {
    return Arrays.stream(arr).anyMatch(i -> i == key);
}



解决方案#1

由于原始问题只需要一个简化的解决方案(而不是更快的解决方案),这里是一个单行解决方案:

public boolean contains(int[] array, int key) {
    return Arrays.toString(array).matches(".*[\\[ ]" + key + "[\\],].*");
}

说明: Arrays.toString() Javadoc声明结果用方括号括起来,相邻的元素用字符“,”(逗号后跟空格)分隔。 所以我们可以指望这一点。 首先我们将array转换为字符串,然后检查该字符串中是否包含key 。 当然我们不能接受“子号”(例如“1234”包含“23”),所以我们必须寻找key前面有一个开括号或空格的模式,然后是一个右括号或一个逗号。

注意:使用的正则表达式模式也正确处理负数(其字符串表示以减号开头)。

解决方案#2

此解决方案已发布但包含错误,因此我发布了正确的解决方案:

public boolean contains(int[] array, int key) {
    Arrays.sort(array);
    return Arrays.binarySearch(array, key) >= 0;
}

此解决方案也有副作用:它修改array (对其进行排序)。




Related