Как найти объект в списке java

Following with Oleg answer, if you want to find ALL objects in a List filtered by a property, you could do something like:

//Search into a generic list ALL items with a generic property
public final class SearchTools {
       public static <T> List<T> findByProperty(Collection<T> col, Predicate<T> filter) {
           List<T> filteredList = (List<T>) col.stream().filter(filter).collect(Collectors.toList());
           return filteredList;
     }

//Search in the list "listItems" ALL items of type "Item" with the specific property "iD_item=itemID"
public static final class ItemTools {
         public static List<Item> findByItemID(Collection<Item> listItems, String itemID) {
             return SearchTools.findByProperty(listItems, item -> itemID.equals(item.getiD_Item()));
         }
     }
}

and similarly if you want to filter ALL items in a HashMap with a certain Property

//Search into a MAP ALL items with a given property
public final class SearchTools {
       public static <T> HashMap<String,T> filterByProperty(HashMap<String,T> completeMap, Predicate<? super Map.Entry<String,T>> filter) {
           HashMap<String,T> filteredList = (HashMap<String,T>) completeMap.entrySet().stream()
                                .filter(filter)
                                .collect(Collectors.toMap(map -> map.getKey(), map -> map.getValue()));
           return filteredList;
     }

     //Search into the MAP ALL items with specific properties
public static final class ItemTools {

        public static HashMap<String,Item> filterByParentID(HashMap<String,Item> mapItems, String parentID) {
            return SearchTools.filterByProperty(mapItems, mapItem -> parentID.equals(mapItem.getValue().getiD_Parent()));
        }

        public static HashMap<String,Item> filterBySciName(HashMap<String,Item> mapItems, String sciName) {
            return SearchTools.filterByProperty(mapItems, mapItem -> sciName.equals(mapItem.getValue().getSciName()));
        }
    }

Сама Java предоставляет несколько способов поиска элемента в списке:

  • Методcontains

  • МетодindexOf 

  • An ad-hoc for loop и

  • Stream API

3.1. contains()с

List предоставляет метод под названиемcontains:

boolean contains(Object element)

Как следует из названия, этот метод возвращаетtrue, если список содержит указанныйelement,, и возвращаетfalse в противном случае. 

Поэтому, когда нам просто нужно проверить, существует ли определенный элемент в нашем списке, мы можем сделать:

Customer james = new Customer(2, "James");
if (customers.contains(james)) {
    // ...
}

3.2. indexOf()с

indexOf — еще один полезный метод поиска элементов:

int indexOf(Object element)

Этот метод возвращает индекс первого появления указанногоelement в данном списке или -1, если список не содержитelement.

Итак, логически, если этот метод возвращает что-либо кроме -1, мы знаем, что список содержит элемент:

if(customers.indexOf(james) != -1) {
    // ...
}

Основное преимущество использования этого метода заключается в том, что он может сообщить нам положение указанного элемента в данном списке.

3.3. Основные циклы

Но что, если мы хотим выполнить поиск элемента на основе полей? Допустим, мы объявляем лотерею и нам нужно объявитьCustomer с конкретнымname в качестве победителя.

Для таких полевых поисков мы можем обратиться к итерации.

Традиционный способ перебора списка — использование одной из конструкцийJava’s looping. На каждой итерации мы сравниваем текущий элемент в списке с элементом, который ищем, чтобы проверить, совпадает ли он:

public Customer findUsingEnhancedForLoop(
  String name, List customers) {

    for (Customer customer : customers) {
        if (customer.getName().equals(name)) {
            return customer;
        }
    }
    return null;
}

Здесьname относится к имени, которое мы ищем в данном спискеcustomers. Этот метод возвращает первый объектCustomer в списке с совпадающимname иnull, если такогоCustomer не существует.

3.4. Цикл сIterator

Iterator — это еще один способ просмотра списка элементов.

Мы можем просто взять наш предыдущий пример и немного его настроить:

public Customer findUsingIterator(
  String name, List customers) {
    Iterator iterator = customers.iterator();
    while (iterator.hasNext()) {
        Customer customer = iterator.next();
        if (customer.getName().equals(name)) {
            return customer;
        }
    }
    return null;
}

И поведение такое же, как и раньше.

3.5. API Java 8Stream

Начиная с Java 8, мы также можемuse the Stream API, чтобы найти элемент вList.

Чтобы найти элемент, соответствующий определенным критериям в данном списке, мы:

  • вызватьstream() в списке

  • вызвать методfilter() с правильнымPredicate

  • вызвать sconstructfindAny() , который возвращаетthe first element that matches the filter predicate wrapped in an Optional, если такой элемент существует **

Customer james = customers.stream()
  .filter(customer -> "James".equals(customer.getName()))
  .findAny()
  .orElse(null);

Для удобства мы по умолчанию используемnull в случае, еслиOptional пуст, но это не всегда может быть лучшим выбором для каждого сценария.

This post will discuss how to check if a value exists in a List in Java.

1. Using List.contains() method

To check whether a List contains a given element or not, you can simply use the List.contains() method as demonstrated below:

import java.util.Arrays;

import java.util.List;

class Main

{

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        int value = 3;

        boolean isExists = list.contains(value);

        System.out.println(isExists);        // true

    }

}

Download  Run Code

 
You might want to override the equals() and hashCode() methods to make this work correctly with objects. Please note that the contains() method might end up iterating the complete list to find a value. For frequent calls, it’s better to convert the list into a set and call the contains() method on it.

import java.util.Arrays;

import java.util.HashSet;

import java.util.List;

class Main

{

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        int value = 3;

        boolean isExists = new HashSet<>(list).contains(value);

        System.out.println(isExists);        // true

    }

}

Download  Run Code

2. Using Stream.filter() method

This can be easily done using Java 8 Stream filters. Here’s the code demonstrating the usage:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

import java.util.Arrays;

import java.util.List;

import java.util.Objects;

class Main

{

    private static boolean contains(List<Integer> list, int value) {

        return list.stream()

            .filter(x -> Objects.equals(x, value))

            .count() > 0;

    }

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        int value = 3;

        boolean isExists = contains(list, value);

        System.out.println(isExists);        // true

    }

}

Download  Run Code

 
Here’s an even shorter version of the above code that makes use of the anyMatch() method to conditionally search an element in a List:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import java.util.Arrays;

import java.util.List;

import java.util.Objects;

class Main

{

    private static boolean contains(List<Integer> list, int value) {

        return list.stream().anyMatch(e -> Objects.equals(e, value));

    }

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        int value = 3;

        boolean isExists = contains(list, value);

        System.out.println(isExists);        // true

    }

}

Download  Run Code

3. Using Apache Commons Collections

You can also use CollectionUtils.containsAny() provided by Apache Commons Collections that works in a similar way as Collections.contains() method.

import org.apache.commons.collections4.CollectionUtils;

import java.util.Arrays;

import java.util.List;

class Main

{

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        int value = 3;

        boolean isExists = CollectionUtils.containsAny(list, value);

        System.out.println(isExists);        // true

    }

}

Download Code

4. Using enhanced for loop

If you use Java 7 or less, you can conditionally search for an element in the List using an enhanced for loop.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

import java.util.Arrays;

import java.util.List;

import java.util.Objects;

class Main

{

    private static boolean contains(List<Integer> list, int value) {

        for (int e : list) {

            if (Objects.equals(e, value)) {

                return true;

            }

        }

        return false;

    }

    public static void main(String[] args) {

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

        int value = 3;

        boolean isExists = contains(list, value);

        System.out.println(isExists);        // true

    }

}

Download  Run Code

That’s all about checking if a value exists in a List in Java.

Thanks for reading.

Please use our online compiler to post code in comments using C, C++, Java, Python, JavaScript, C#, PHP, and many more popular programming languages.

Like us? Refer us to your friends and help us grow. Happy coding :)

Интерфейс Java List, java.util.List, представляет упорядоченную последовательность объектов. Элементы, содержащиеся в списке Java, вставлять и удалять в соответствии с порядком их появления в списке.

Каждый элемент в списке Java имеет индекс. Первый элемент в имеет индекс 0, второй элемент имеет индекс 1 и т.д.

Вы можете добавить любой объект в список. Если список не типизирован с использованием Java Generics, то вы можете даже смешивать объекты разных типов (классов) в одном и том же списке.

Java List – это стандартный интерфейс, который является подтипом Java Collection, что означает, что означает, что List наследуется от Collection.
методы Java List

Если вы предпочитаете смотреть видео вместо чтения текста, вот видео версия этого учебника по Java List:

Java List и Set

Java List и Java Set очень похожи в том, что они оба представляют коллекцию элементов. Тем не менее, есть некоторые существенные различия.

Первое различие между Java List и Java Set состоит в том, что один и тот же элемент может встречаться в списке более одного раза. Это отличается от набора, где каждый элемент может встречаться только один раз.

Второе различие – элементы в List имеют порядок, и элементы могут повторяться в этом порядке. Набор не предполагает порядок элементов, хранящихся внутри.

Реализация List

Будучи подтипом Collection, все методы в интерфейсе Collection также доступны в Listinterface.

Поскольку List – это интерфейс, вам необходимо создать конкретную реализацию интерфейса, чтобы использовать его. Вы можете выбирать между следующими реализациями List в API коллекций Java:

  • java.util.ArrayList
  • java.util.LinkedList
  • java.util.Vector
  • java.util.Stack

Также есть параллельные реализации List в пакете java.util.concurrent.

Вот несколько примеров того, как создать экземпляр List:

List listA = new ArrayList();
List listB = new LinkedList();
List listC = new Vector();
List listD = new Stack();

Как вставить элементы в список Java

Вставить элементы (объекты) в список Java можно методом add (). Вот пример добавления элементов в список Java:

List listA = new ArrayList();

listA.add("element 1");
listA.add("element 2");
listA.add("element 3");

Первые три вызова add () добавляют экземпляр String в конец списка.

Вставить нулевые значения

На самом деле возможно вставить даже нулевые значения в список.

Object element = null;

List list = new ArrayList();

list.add(element);

Добавить элементы по определенному индексу

Можно добавить элемент в список по определенному индексу. Интерфейс List имеет версию метода add(), которая принимает индекс в качестве первого параметра, и элемент для вставки в качестве второго параметра. Вот пример вставки элемента с индексом 0.

list.add(0, "element 4");

Если список уже содержит элементы, то теперь они будут перемещаться дальше во внутренней последовательности. Элемент, который имел индекс 0 до того, как новый элемент был вставлен в индекс 0, будет перемещен в индекс 1 и т.д.

Вставляем все элементы из одного списка в другой

Можно добавить все элементы из одного списка в другой. Сделаем это с помощью метода ListaddAll (). Результат представляет собой объединение двух списков.

List listSource = new ArrayList();

listSource.add("123");
listSource.add("456");

List listDest   = new ArrayList();

listDest.addAll(listSource);

Этот пример добавляет все элементы из listSource в listDest.

Метод addAll () принимает набор в качестве параметра, поэтому в качестве параметра можно передать список или набор.

Получить элементы из списка Java

Вы можете получить элементы из списка Java, используя индекс элементов. Методом get (int index). Вот пример доступа к элементам списка с использованием индексов элементов:

List listA = new ArrayList();

listA.add("element 0");
listA.add("element 1");
listA.add("element 2");

//access via index
String element0 = (String) listA.get(0);
String element1 = (String) listA.get(1);
String element3 = (String) listA.get(2);

Также возможно итерировать элементы списка в том порядке, в котором они хранятся внутри.

Как найти элементы в списке Java

Вы можете найти элементы в списке Java, используя один из этих двух методов:

  1. index()
  2. LastIndexOf ()Метод indexOf () находит индекс первого вхождения в списке заданного элемента.
List list = new ArrayList();

String element1 = "element 1";
String element2 = "element 2";

list.add(element1);
list.add(element2);

int index1 = list.indexOf(element1);
int index2 = list.indexOf(element2);

System.out.println("index1 = " + index1);
System.out.println("index2 = " + index2);

Запуск этого кода приведет к следующему результату:

index1 = 0
index2 = 1

Найти последнее вхождение элемента в списке

Метод lastIndexOf () находит индекс последнего вхождения в списке данного элемента.

List list = new ArrayList();

String element1 = "element 1";
String element2 = "element 2";

list.add(element1);
list.add(element2);
list.add(element1);

int lastIndex = list.lastIndexOf(element1);
System.out.println("lastIndex = " + lastIndex);

Результат, напечатанный при запуске приведенного выше примера будет таков:

lastIndex = 2

Элемент 1 встречается 2 раза. Индекс последнего равен 2.

Проверка: содержит ли список элемент?

Вы можете проверить, содержит ли Java List данный элемент, используя метод List contains ().

List list = new ArrayList();

String element1 = "element 1";

list.add(element1);

boolean containsElement =
    list.contains("element 1");

System.out.println(containsElement);

Результат:
true

Чтобы определить, содержит ли List этот элемент, List будет внутренне выполнять итерации своих элементов и сравнивать каждый элемент с объектом, переданным в качестве параметра.

Поскольку можно добавить нулевые значения в список, фактически можно проверить, содержит ли список нулевое значение.

list.add(null);

containsElement = list.contains(null);

System.out.println(containsElement);

Очевидно, что если входной параметр для contains () имеет значение null, метод contains () не будет использовать метод equals() для сравнения с каждым элементом, а вместо этого использует оператор ==.

Как удалить элементы из списка Java

Вы можете удалить элементы из списка Java с помощью этих двух методов:

  • remove(Object element)
  • remove(int index)

remove (Object element) удаляет элемент в списке, если он присутствует. Все последующие элементы, затем перемещаются вверх по списку. Таким образом, их индекс уменьшается на 1.

List list = new ArrayList();

String element = "first element";
list.add(element);

list.remove(element);

Этот пример сначала добавляет элемент, а затем снова удаляет его.

Метод List remove (int index) удаляет элемент по указанному индексу.

List list = new ArrayList();

list.add("element 0");
list.add("element 1");
list.add("element 2");

list.remove(0);

После выполнения этого примера кода список будет содержать элементы 1 и 2 с индексами 0 и 1.

Очистить список

Интерфейс Java List содержит метод clear (), который удаляет все элементы из списка при вызове. Удаление всех элементов также называется очисткой.

List list = new ArrayList();

list.add("object 1");
list.add("object 2");
//etc.

list.clear();

Как сохранить все элементы из одного списка в другом

Метод retainAll () способен сохранять все элементы из одного списка в другом. Другими словами, метод retain () удаляет все элементы, которые не найдены в другом списке.

Результатом является пересечение двух списков.

List list      = new ArrayList();
List otherList = new ArrayList();

String element1 = "element 1";
String element2 = "element 2";
String element3 = "element 3";
String element4 = "element 4";

list.add(element1);
list.add(element2);
list.add(element3);

otherList.add(element1);
otherList.add(element3);
otherList.add(element4);

list.retainAll(otherList);

Узнать количество элементов

Вы можете получить количество элементов вызвав метод size (). Вот пример:

List list = new ArrayList();

list.add("object 1");
list.add("object 2");

int size = list.size();

Подсписок списка

Метод subList () может создавать новый List с подмножеством элементов из исходного List.

Метод subList () принимает 2 параметра: начальный индекс и конечный индекс. Начальный индекс – это индекс первого элемента из исходного списка для включения в подсписок.

Конечный индекс является последним индексом подсписка, но элемент в последнем индексе не включается в подсписок. Это похоже на то, как работает метод подстроки Java String.

List list      = new ArrayList();

list.add("element 1");
list.add("element 2");
list.add("element 3");
list.add("element 4");

List sublist = list.subList(1, 3);

После выполнения list.subList (1,3) подсписок будет содержать элементы с индексами 1 и 2.

Помните, что исходный список содержит 4 элемента с индексами от 0 до 3. Вызов list.subList (1,3) будет включить индекс 1, но исключить индекс 3, сохраняя тем самым элементы с индексами 1 и 2.

Преобразовать list в set

Вы можете преобразовать список Java в набор(set), создав новый набор и добавив в него все элементы из списка. Набор удалит все дубликаты.

Таким образом, результирующий набор будет содержать все элементы списка, но только один раз.

List list = new ArrayList();

list.add("element 1");
list.add("element 2");
list.add("element 3");
list.add("element 3");

Set set = new HashSet();
set.addAll(list);

Обратите внимание, что список содержит элемент String 3 два раза. Набор будет содержать эту строку только один раз. Таким образом, результирующий набор будет содержать строки:  element 1element 2 and element 3 .

Читайте как преобразовать список в массив Java.

Общие списки

По умолчанию вы можете поместить любой объект в список, но Java позволяет ограничить типы объектов, которые вы можете вставить в список.

List<MyObject> list = new ArrayList<MyObject>();

Этот список теперь может содержать только экземпляры MyObject. Затем вы можете получить доступ к итерации его элементов без их приведения.

MyObject myObject = list.get(0);

for(MyObject anObject : list){
   //do someting to anObject...
}

Сортировка

Вы можете отсортировать список с помощью метода Collections sort ().

Если Список содержит объекты, которые реализуют интерфейс Comparable (java.lang.Comparable), тогда эти объекты можно сравнивать. В этом случае вы можете отсортировать список следующим образом:

List<String> list = new ArrayList<String>();

list.add("c");
list.add("b");
list.add("a");

Collections.sort(list);

Класс Java String реализует интерфейс Comparable, вы можете отсортировать их в естественном порядке, используя метод Collections sort ().

Сортировка списка с помощью Comparatorimplementation

Если объекты не реализуют интерфейс Comparable или если вы хотите отсортировать объекты в порядке, отличном от их реализации compare (), вам необходимо использовать Comparatorimplementation (java.util.Comparator).

public class Car{
    public String brand;
    public String numberPlate;
    public int noOfDoors;

    public Car(String brand, String numberPlate, int noOfDoors) {
        this.brand = brand;
        this.numberPlate = numberPlate;
        this.noOfDoors = noOfDoors;
    }
}

Вот код сортировки:

List<Car> list = new ArrayList<>();

list.add(new Car("Volvo V40" , "XYZ 201845", 5));
list.add(new Car("Citroen C1", "ABC 164521", 4));
list.add(new Car("Dodge Ram" , "KLM 845990", 2));

Comparator<Car> carBrandComparator = new Comparator<Car>() {
    @Override
    public int compare(Car car1, Car car2) {
        return car1.brand.compareTo(car2.brand);
    }
};

Collections.sort(list, carBrandComparator);

Обратите внимание на реализацию Comparator в приведенном выше примере. Эта реализация сравнивает только поле марки автомобилей Car. Можно создать другую реализацию Comparator, которая сравнивает номерные знаки или даже количество дверей в автомобилях.

Возможно реализовать Comparator с использованием Java Lambda. Вот пример, который сортирует объекты List of Car с использованием трех различных реализаций интерфейса Comparator, каждая из которых сравнивает экземпляры Car по своему полю:

List<Car> list = new ArrayList<>();

list.add(new Car("Volvo V40" , "XYZ 201845", 5));
list.add(new Car("Citroen C1", "ABC 164521", 4));
list.add(new Car("Dodge Ram" , "KLM 845990", 2));


Comparator<Car> carBrandComparatorLambda      =
    (car1, car2) -> car1.brand.compareTo(car2.brand);

Comparator<Car> carNumberPlatComparatorLambda =
    (car1, car2) -> car1.numberPlate.compareTo(car2.numberPlate);

Comparator<Car> carNoOfDoorsComparatorLambda  =
    (car1, car2) -> car1.noOfDoors - car2.noOfDoors;

Collections.sort(list, carBrandComparatorLambda);
Collections.sort(list, carNumberPlatComparatorLambda);
Collections.sort(list, carNoOfDoorsComparatorLambda);

Итерации

Вы можете выполнить итерацию списка несколькими различными способами. Три наиболее распространенных способа:

  • Использование итератора
  • Использование цикла for-each
  • Использование цикла for
  • Использование API Java Stream

Итерация списка с помощью итератора

Первый способ итерации списка – использовать итератор Java.

List list = new ArrayList();

list.add("first");
list.add("second");
list.add("third");

Iterator iterator = list.iterator();
while(iterator.hasNext()) {
    Object next = iterator.next();
}

Вызывая метод iterator () интерфейса List.

Вызов hasNext () выполняется внутри цикла while.

Внутри цикла while вы вызываете метод Iterator next () для получения следующего элемента, на который указывает Iterator.

Если список задан с использованием Java Generics, вы можете сохранить некоторые объекты внутри цикла while.

List<String> list = new ArrayList<>();

list.add("first");
list.add("second");
list.add("third");
    
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
    String obj = iterator.next();
}

Итерация списка с использованием цикла For-Each

Второй способ итерации List – использовать цикл for.

List list = new ArrayList();

list.add("first");
list.add("second");
list.add("third");

for(Object element : list) {
    System.out.println(element);
}

Цикл for выполняется один раз для каждого элемента. Внутри цикла for каждый элемент, в свою очередь, связан с переменной obj.

Можно изменить тип переменной внутри цикла for.

List<String> list = new ArrayList<String>();

//add elements to list

for(String element : list) {
    System.out.println(element);
}

Итерация списка с помощью цикла For

Третий способ итерации List – использовать стандартный цикл for, подобный следующему:

List list = new ArrayList();

list.add("first");
list.add("second");
list.add("third");
    
for(int i=0; i < list.size(); i++) {
    Object element = list.get(i);
}

Цикл for создает переменную int и инициализирует ее 0. Затем она зацикливается, пока переменная int i меньше размера списка. Для каждой итерации переменная i увеличивается.

Внутри цикла for обращаемся к элементам List с помощью метода get (), передавая в качестве параметра переменную i.

Опять же, если список напечатан с использованием Java Generics, например, для для строки, то вы можете использовать универсальный тип списка в качестве типа для локальной переменной, которая присваивается каждому элементу списка во время итерации.

List<String> list = new ArrayList<String>();

list.add("first");
list.add("second");
list.add("third");
    
for(int i=0; i < list.size(); i++) {
    String element = list.get(i);
}

Тип локальной переменной внутри цикла for теперь String. Поскольку список обычно типизируется как String, он может содержать только объекты String.

Следовательно, компилятор знает, что только метод String может быть возвращен из метода get (). Поэтому вам не нужно приводить элемент, возвращенный get (), в String.

Перебор списка с использованием API Java Stream

Четвертый способ итерации через API Java Stream. Для итерации вы должны сначала получить поток из списка. Получение потока из списка в Java выполняется путем вызова метода Liststream ().

List<String> stringList = new ArrayList<String>();

stringList.add("abc");
stringList.add("def");

Stream<String> stream = stringList.stream();

Как только вы получили поток из списка, вы можете выполнить итерацию потока, вызвав его метод forEach ().

List<String> stringList = new ArrayList<String>();

stringList.add("one");
stringList.add("two");
stringList.add("three");

Stream<String> stream = stringList.stream();
stream
    .forEach( element -> { System.out.println(element); });

Вызов метода forEach () заставит Stream выполнить внутреннюю итерацию всех элементов потока.

Введение В Java или на любом другом языке программирования обычно проверяют, содержит ли массив значение. Это одна из вещей, которую обычно усваивают новички, и в целом это полезно знать. В этой статье мы рассмотрим, как проверить, содержит ли массив значение или элемент в Java. * Arrays.asList (). Contains () * Использование цикла for * Collections.binarySearch () * API потока Java 8 * Apache Commons — ArrayUtils Arrays.asList (). Contains () T

Вступление

Будь то Java или любой другой язык программирования, обычно проверяют,
содержит ли массив значение. Это одна из вещей, которую обычно усваивают
новички, и в целом это полезно знать.

В этой статье мы рассмотрим, как проверить, содержит ли массив значение
или элемент
в Java .

  • Arrays.asList (). Contains ()
  • Использование цикла for
  • Collections.binarySearch ()
  • Java 8 Stream API
  • Apache Commons — ArrayUtils

Arrays.asList (). Contains ()

Это, пожалуй, самый распространенный способ решения этой проблемы просто
потому, что он работает очень хорошо и его легко реализовать.

Сначала мы конвертируем массив в ArrayList . Существуют различные
способы преобразования массива Java в
ArrayList , однако мы будем
использовать наиболее широко используемый подход.

Затем мы можем использовать метод contains() для результирующего
ArrayList , который возвращает логическое значение, указывающее,
содержит ли список переданный нам элемент или нет.

Массив Integer типа:

 Integer[] intArray = new Integer[]{1, 2, 3, 4, 5}; 
 String[] nameArray = new String[]{"John", "Mark", "Joe", "Bill", "Connor"}; 
 
 List<Integer> intList = new ArrayList<>(Arrays.asList(intArray)); 
 List<String> nameList = new ArrayList<>(Arrays.asList(nameArray)); 
 
 System.out.println(intList.contains(12)); 
 System.out.println(nameList.contains("John")); 

Выполнение этого кода приводит к:

 false 
 true 

Использование цикла for

Более простой и ручной подход к решению проблемы — использование цикла
for В худшем случае он выполнит итерацию по всему массиву один раз,
проверяя, присутствует ли элемент.

Начнем сначала с примитивных целых чисел:

 int[] intArray = new int[]{1, 2, 3, 4, 5}; 
 boolean found = false; 
 int searchedValue = 2; 
 
 for(int x : intArray){ 
 if(x == searchedValue){ 
 found = true; 
 break; 
 } 
 } 
 
 System.out.println(found); 

Для found переменной изначально установлено значение false потому
что единственный способ вернуть true это найти элемент и явно
присвоить новое значение логическому элементу. Здесь мы просто
сравниваем каждый элемент массива со значением, которое ищем, и
возвращаем true если они совпадают:

 true 

Для строк и настраиваемых объектов, которые могут быть в вашем коде, вы
должны использовать другой оператор сравнения. Предполагая, что вы
действительно переопределили метод equals() , вы можете использовать
его, чтобы проверить, равен ли объект другому, возвращая true если
они:

 String[] stringArray = new String[]{"John", "Mark", "Joe", "Bill", "Connor"}; 
 boolean found = false; 
 String searchedValue = "Michael"; 
 
 for(String x : stringArray){ 
 if(x.equals(searchedValue)){ 
 found = true; 
 break; 
 } 
 } 
 
 System.out.println(found); 

Выполнение этого кода приведет к:

 false 

Collections.binarySearch ()

Кроме того, мы можем найти конкретное значение, используя встроенный
метод binarySearch() из класса Collections Проблема с двоичным
поиском в том, что он требует сортировки нашего массива. Если наш
массив отсортирован , хотя, binarySearch() превосходит как
Arrays.asList().contains() и для петли подходов.

Если он не отсортирован, дополнительное время, необходимое для
сортировки массива, может сделать этот подход менее выгодным, в
зависимости от размера массива и алгоритма сортировки, используемого для
его сортировки.

binarySearch() имеет много перегруженных вариантов в зависимости от
используемых типов и наших собственных требований, но наиболее общий из
них:

 public static int binarySearch(Object[] a, Object[] key) 

Где a представляет массив, и key указанное значение, которое мы
ищем.

Теперь возвращаемое значение может немного сбивать с толку, поэтому
лучше иметь в виду официальную документацию Oracle:

Возвращаемое значение этого метода — индекс искомого ключа, если он
содержится в массиве; в противном случае (- ( точка вставки ) — 1),
где точка вставки определяется как точка, в которой ключ будет
вставлен в массив: индекс первого элемента больше, чем ключ, или
a.length если все элементы в массив меньше указанного ключа.

Давайте попробуем это:

 Integer[] intArray = new Integer[]{1, 2, 3, 4, 5}; 
 String[] nameArray = new String[]{"Bill", "Connor", "Joe", "John", "Mark"}; // Array is already sorted lexicographically 
 
 List<Integer> intList = new ArrayList<>(Arrays.asList(intArray)); 
 List<String> nameList = new ArrayList<>(Arrays.asList(nameArray)); 
 System.out.println(Collections.binarySearch(intList, 2)); 
 System.out.println(Collections.binarySearch(nameList, "Robin")); 

Это выведет:

 1 
 -6 

Первый элемент находится в позиции 1 . Второй элемент не найден и
будет вставлен в позицию 5 — в конец массива. Возвращаемое значение
-(insertion point)-1 , поэтому возвращаемое значение оказывается -6
.

Если значение больше или равно 0 , массив содержит элемент, в
противном случае он не содержит его.

Java 8 Stream API

Java 8 Stream API очень универсален и предлагает краткие решения
различных задач, связанных с обработкой коллекций объектов. Для
большинства задач использование Streams является естественным и
интуитивно понятным.

Давайте посмотрим, как мы можем использовать Stream API, чтобы
проверить, содержит ли массив целое число:

 Integer[] arr = new Integer[]{1, 2, 3, 4, 5}; 
 
 System.out.println(Arrays.stream(arr).anyMatch(x -> x == 3)); 

Это выведет:

 true 

И чтобы сделать это со строками или настраиваемыми объектами:

 String[] arr = new String[]{"John", "Mark", "Joe", "Bill", "Connor"}; 
 
 String searchString = "Michael"; 
 
 boolean doesContain = Arrays.stream(arr) 
 .anyMatch(x -> x.equals(searchString)); 
 
 System.out.println(doesContain); 

Или вы можете сделать это короче, используя ссылку на метод:

 boolean doesContain = Arrays.stream(arr) 
 .anyMatch(searchString::equals); 
 
 System.out.println(doesContain); 

Оба они выведут:

 false 

Apache Commons — ArrayUtils

Библиотека Apache Commons предоставляет
множество новых интерфейсов, реализаций и классов, расширяющих базовую
платформу Java Framework, и присутствует во многих проектах.

Класс ArrayUtils представляет множество методов для управления
массивами, включая метод contains() :

 Integer[] intArray = new Integer[]{1, 2, 3, 4, 5}; 
 String[] nameArray = new String[]{"John", "Mark", "Joe", "Bill", "Connor"}; 
 
 System.out.println(ArrayUtils.contains(intArray, 3)); 
 System.out.println(ArrayUtils.contains(nameArray, "John")); 

Это приведет к:

 true 
 true 

Заключение

В этой статье мы рассмотрели несколько способов проверить, содержит ли
массив в Java определенный элемент или значение. Мы рассмотрели
преобразование массива в список и вызов contains() с использованием
цикла for, Java 8 Stream API, а также Apache Commons.

Понравилась статья? Поделить с друзьями:
  • Как найти правильные глаголы в английском тексте
  • Как найти инструкцию лего по фото
  • Как найти динозавра в лесу
  • Если не загустел холодец как исправить желатином
  • Как найти связи с хорошими людьми