it-swarm.com.ru

Java, упрощенная проверка, если массив int содержит int

По сути, мой приятель говорил, что я мог бы сделать мой код короче, используя другой способ проверки, содержит ли массив int int, хотя он не скажет мне, что это такое: P.

Текущий: 

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

Также пробовал это, хотя он всегда возвращает ложь по какой-то причине.

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

Кто-нибудь может мне помочь?

Спасибо.

72
Caleb

Вы можете просто использовать ArrayUtils.contains из Apache Commons Lang library.

public boolean contains(final int[] array, final int key) {     
    return ArrayUtils.contains(array, key);
}
52
Reimeus

Это потому, что Arrays.asList(array) return 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> и автобокс здесь не работает.

29
Tomasz Nurkiewicz

Гуава предлагает дополнительные методы для примитивных типов. Среди них метод содержит те же аргументы, что и ваш.

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

Вы также можете статически импортировать версию гуавы. 

См. Объяснены Примитивы Гуавы

17
Evert

Вот решение Java 8

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

Другой способ: 

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

Это изменяет переданный массив. У вас будет возможность скопировать массив и работать с исходным массивом, т.е. int[] sorted = array.clone();
Но это всего лишь пример короткого кода. Время выполнения O(NlogN), а ваш путь O(N)

15
Cratylus

Я знаю, что уже поздно, но попробуйте Integer[] вместо int[].

12
Willy Wonka

Если массив имеет тип int, double или long, мы можем использовать эти IntStream, DoubleStream или LongStream соответственно

int[] values = { 1, 33, 55, 66 };
int testValue = 33;
boolean contains = IntStream.of(values).anyMatch(x -> x == testValue);

Reference- Проверка значения в массиве

3
Rameez

1. одноразовое использование 

List<T> list=Arrays.asList(...)
list.contains(...)

2. Используйте HashSet для оценки производительности, если вы используете более одного раза.

Set <T>set =new HashSet<T>(Arrays.asList(...));
set.contains(...)
0
Jaskey

Вы можете использовать класс Java.util.Arrays для преобразования массива T[?] в объект List<T> с помощью таких методов, как contains:

Arrays.asList(int[] array).contains(int key);
0
Mourad El Aomari

это работало в Java 8

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

Попробуй это:

public static void arrayContains(){
    int myArray[]={2,2,5,4,8};

    int length=myArray.length;

    int toFind = 5;
    boolean found = false;

    for(int i = 0; i < length; i++) {
        if(myArray[i]==toFind) {
            found=true;
        }
    }

    System.out.println(myArray.length);
    System.out.println(found); 
}
0
Elavarasan S