1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/pyinjava-jtuple

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 04:27 7548d5a

JTuple

JTuple — это тип данных «кортеж» для языка Java, который реализует характеристики кортежей (неизменяемость и возможность итерирования), а также часто используемые методы операций.

Особенности:

  • лёгкий вес;
  • отсутствие зависимостей;
  • потокобезопасность.

Значение кортежа

Основная цель кортежа — представлять несколько значений. Часто возникает необходимость вернуть группу значений, причём типы этих значений могут быть разными. Например, при HTTP-запросе может потребоваться вернуть код ответа (int) и ответное сообщение (String).

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

Другой вариант — вернуть список, но из-за разных типов элементов можно использовать только List, что ухудшает читаемость кода.

Кортежи были созданы для решения таких проблем. Многие современные языки программирования, такие как Python и Scala, имеют встроенные кортежи. Этот проект позволяет разработчикам на Java также воспользоваться преимуществами использования кортежей.

Основные реализации

Класс Описание
Tuple Абстрактный класс для кортежей, реализующий структуру данных кортежа и часто используемые операции
Tuple0 Пустой кортеж без элементов
Tuple1 Кортеж с одним элементом
Tuple2 Кортеж с двумя элементами
Tuple3 Кортеж с тремя элементами
Tuple4 Кортеж с четырьмя элементами
Tuple5 Кортеж с пятью элементами
TupleN Кортеж с N элементами
Tuples Класс инструментов, предоставляющий элегантные способы использования кортежей

Операции с кортежами

Операция API Описание
add Объединение кортежей
foreach Итерация по кортежу
forEachWithIndex Итерация по кортежам с индексом
reverse Переворачивание кортежа
toArray Преобразование кортежа в массив
toList Преобразование кортежа в список
get Получение элемента из кортежа по индексу
contains Проверка наличия элемента в кортеже
subTuple Извлечение подкортежа
equals Сравнение содержимого двух кортежей на равенство
toString Вывод строкового представления кортежа, например (123, 456)
repeat Повторение всех элементов в кортеже заданное количество раз
stream Превращение кортежа в поток, аналогично List.stream
parallelStream Превращение кортежа в параллельный поток, аналогично List.parallelStream
sort Сортировка списка или массива кортежей

Примеры использования API

// Статический импорт инструментального класса, затем начало элегантного использования кортежей
import static com.github.sd4324530.jtuple.Tuples.tuple;
// Чтение элемента по указанному индексу
Tuple2<String, Integer> tuple = tuple("test", 123);
log.debug("first:{}", tuple2.first);//test
log.debug("second:{}", tuple2.second);//123
// toString
Tuple4<String, Integer, Boolean, Double> tuple = tuple("test", 123, true, 186.5);
log.debug("tuple4:{}", tuple.toString());//(test, 123, true, 186.5)
// Итерация по кортежу
Tuple5<String, Integer, Boolean, Double, Character> tuple = tuple("test", 123, true, 186.5, 'A');
// Способ 1
tuple.forEach(o -> log.debug(Objects.toString(o)));
// Способ 2
for (Object object : tuple) {
  log.debug(Objects.toString(object));
}
// Объединение кортежей
Tuple1<String> tuple1 = tuple("hello");
Tuple2<String, String> tuple2 = tuple("world", "!");
Tuple3<Integer, Integer, Integer> tuple3 = tuple(1, 2, 3);
log.debug("add:{}", tuple1.add(tuple2).toString());//(hello, world, !)
log.debug("add:{}", tuple1.add(tuple2, tuple3).toString());//(hello, world, !, 1, 2, 3)
// Переворот кортежа
Tuple4<String, Integer, Boolean, Double> tuple = tuple("hello", 123, true, 186.5);
log.debug("reverse:{}", tuple.reverse().toString());//(186.5, true, 123, hello)
// Повторение элементов кортежа
Tuple2<String, String> tuple2 = tuple("a", "b");
log.debug("repeat:{}", tuple2.repeat(3).toString());//(a, b, a, b, a, b)
// Извлечение подкортежа
TupleN tupleN = tuple(0, 1, 2, 3, 4, 5, 6);
log.debug("sub:{}", tupleN.subTuple(0, 3).toString());//(0, 1, 2, 3) **Пример использования кортежей**

1. **HTTP-запрос в обёртке:**

   ```java
   public class HttpKit {

       /**
        * HTTP GET запрос
        *
        * @param url URL запроса
        * @return результат запроса в виде кортежа, первый элемент — код ответа, второй — содержимое ответа, третий — исключение при неудачном запросе
        */
       public Tuple3<Integer, String, Exception> get(String url) {
           // отправка запроса и анализ результата
           return null;
       }
   }
  1. Обёртка для операций с базой данных:

    public class DbKit {
    
      import static com.github.sd4324530.jtuple.Tuples.tuple;
        /**
         * Выполнение SQL-запроса
         *
         * @param sql SQL-запрос
         * @return кортеж результатов выполнения: первый элемент указывает на наличие исключения, если он равен null, то выполнение прошло успешно; второй элемент содержит результаты запроса
         */
        public Tuple2<Exception, List<Object>> query(String sql) {
            try (Connection connection = getConn(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql)) {
                List<Object> data = handleResult(resultSet);
                return tuple(null, data);
            } catch (Exception e) {
                return tuple(e, null);
            }
        }
    }

Импорт (JDK >= 1.8):

<dependency>
     <groupId>com.github.sd4324530</groupId>
     <artifactId>JTuple</artifactId>
     <version>1.2.1</version>
</dependency>

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/pyinjava-jtuple.git
git@api.gitlife.ru:oschina-mirror/pyinjava-jtuple.git
oschina-mirror
pyinjava-jtuple
pyinjava-jtuple
master