Рубрики
Без рубрики

Использование пар в Java

Узнайте, как реализовать функции сопряжения в Java.

Автор оригинала: baeldung.

1. Обзор

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

Простая реализация Пары доступна в основных библиотеках Java. Кроме того, некоторые сторонние библиотеки, такие как Apache Commons и другие, предоставили эту функциональность в своих соответствующих API.

Дальнейшее чтение:

Хэш-карта Java Под капотом

Выполните итерацию по карте на Java

Java – Объединение Нескольких Коллекций

2. Основная Реализация Java

2.1. Класс Пар

Мы можем найти класс Pair в пакете javafx.util . Конструктор этого класса принимает два аргумента, ключ и соответствующее ему значение:

Pair pair = new Pair<>(1, "One");
Integer key = pair.getKey();
String value = pair.getValue();

Этот пример иллюстрирует простой Целое число в Строку сопоставление с использованием концепции пар.

Как показано, ключ в объекте pair извлекается путем вызова метода getKey () , в то время как значение извлекается путем вызова GetValue().

2.2. Абстрактная карта.SimpleEntry и АбстрактНая карта.SimpleImmutableEntry

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

AbstractMap.SimpleEntry entry 
  = new AbstractMap.SimpleEntry<>(1, "one");
Integer key = entry.getKey();
String value = entry.getValue();

Доступ к ключу и значению можно получить с помощью стандартных методов получения и настройки.

Кроме того, класс AbstractMap также содержит вложенный класс, представляющий неизменяемую пару, класс SimpleImmutableEntry :

AbstractMap.SimpleImmutableEntry entry
  = new AbstractMap.SimpleImmutableEntry<>(1, "one");

Это работает аналогично классу mutablepair, за исключением того, что значение пары нельзя изменить. Попытка сделать это приведет к исключению UnsupportedOperationException .

3. Общие ресурсы Apache

В библиотеке Apache Commons мы можем найти класс Pair в пакете org.apache.commons.lang3.tuple|/. Это абстрактный класс, поэтому его нельзя создать напрямую.

Здесь мы можем найти два подкласса, представляющих неизменяемые и изменяемые пары, Imm utable Пара и Изменяемая пара.

Обе реализации имеют доступ к методам получения/установки ключей/значений:

ImmutablePair pair = new ImmutablePair<>(2, "Two");
Integer key = pair.getKey();
String value = pair.getValue();

Неудивительно, что попытка призвать Значение SET() на Неизменная пара приводит к Исключение UnsupportedOperationException.

Однако операция полностью допустима для изменяемой реализации:

Pair pair = new MutablePair<>(3, "Three");
pair.setValue("New Three");

4. Вавр

В библиотеке Vavr функция сопряжения обеспечивается неизменяемым классом Tuple2 :

Tuple2 pair = new Tuple2<>(4, "Four");
Integer key = pair._1();
String value = pair._2();

В этой реализации мы не можем изменить объект после создания, поэтому мутирующие методы возвращают новый экземпляр, содержащий указанное изменение:

tuplePair = pair.update2("New Four");

5. Альтернатива I – Класс Простых Контейнеров

Либо по предпочтениям пользователя, либо в отсутствие какой-либо из вышеупомянутых библиотек стандартным обходным путем для функции сопряжения является создание простого контейнерного класса, который обертывает желаемые возвращаемые значения.

Самым большим преимуществом здесь является возможность указать наше имя, что помогает избежать наличия одного и того же класса, представляющего разные объекты домена:

public class CustomPair {
    private String key;
    private String value;

    // standard getters and setters
}

6. Альтернатива II – Массивы

Другим распространенным обходным путем является использование простого массива с двумя элементами для достижения аналогичных результатов:

private Object[] getPair() {
    // ...
    return new Object[] {key, value};
}

Как правило, ключ находится в нулевом индексе массива, в то время как его соответствующее значение находится в первом индексе.

7. Заключение

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

Как всегда, код для этой статьи доступен на GitHub .