1. Обзор
Поскольку Vavr работает в основном в экосистеме Java, всегда необходимо преобразовать структуры данных Vavr в понятные Java структуры данных.
Например, рассмотрим функцию, которая возвращает io.vavr.collection.List , и мы должны передать результат другой функции, которая принимает java.util.List. Именно здесь пригодится совместимость Java-Vavr.
В этом учебнике, мы будем смотреть на то, как преобразовать несколько структур данных Vavr в наши стандартные коллекции Java и наоборот .
2. Преобразование Вавр в Java
Значение интерфейс в Vavr является базовым интерфейсом для большинства инструментов Vavr. Таким образом, все коллекции Vavr наследуют свойства ценность.
Это полезно, как Значение интерфейс поставляется с большим количеством toJavaXXX () методы которые позволяют преобразовать структуры данных Vavr в эквиваленты Java.
Давайте посмотрим, как Java Список могут быть получены из Список или Поток Вавр:
ListvavrStringList = List.of("JAVA", "Javascript", "Scala"); java.util.List javaStringList = vavrStringList.toJavaList();
StreamvavrStream = Stream.of("JAVA", "Javascript", "Scala"); java.util.List javaStringList = vavrStream.toJavaList();
Первый пример преобразует список Vavr в список Java, а следующий преобразует поток в список Java. Оба примера опираются на toJavaList () метод.
Аналогичным образом, мы можем получить другие коллекции Java от объектов Vavr .
Давайте посмотрим еще один пример преобразования Vavr Карта на Java- карта:
MapvavrMap = HashMap.of("1", "a", "2", "b", "3", "c"); java.util.Map javaMap = vavrMap.toJavaMap();
Помимо стандартных коллекций Java, Vavr также предоставляет API для преобразования значений в Java-потоки и Факультативы .
Давайте посмотрим пример получения Необязательный с помощью в ЯваОптионал () метод:
ListvavrList = List.of("Java"); Optional optional = vavrList.toJavaOptional(); assertEquals("Java", optional.get());
В обзоре методов Vavr этого типа, у нас есть:
- вДжаваррай ()
- toJavaCollection()
- toJavaList()
- toJavaMap()
- toJavaSet()
- в ЯваОптионал ()
- в ДжаваПараллелСтрим ()
- в ЯваСтрим ()
Полный список полезных API можно найти здесь .
3. Преобразование Явы в Вавр
Все реализации коллекции в Vavr имеют базовый тип Проходимый. Таким образом, каждый тип коллекции имеет статический метод всех () что занимает Итерируемые и преобразует его в соответствующую коллекцию Vavr .
Давайте посмотрим, как мы можем преобразовать java.util.List в Вавр Список :
java.util.ListjavaList = Arrays.asList("Java", "Haskell", "Scala"); List vavrList = List.ofAll(javaList);
Аналогичным образом, мы можем использовать всех () метод преобразования потоков Java в коллекции Vavr:
java.util.stream.StreamjavaStream = Arrays.asList("Java", "Haskell", "Scala").stream(); Stream vavrStream = Stream.ofAll(javaStream);
4. Просмотры коллекции Java
Библиотека Vavr также предоставляет Представления коллекции Java, которые делегируют вызовы в базовые коллекции Vavr, .
Методы преобразования Vavr to Java создают новый экземпляр, итерируя все элементы для создания коллекции Java. Это означает, что производительность преобразования является линейной, в то время как производительность создания представлений коллекции постоянна.
Написания этой статьи, только Список вид поддерживается в Vavr.
Для Список , Есть два метода, которые доступны, чтобы получить наш вид. Во-первых, какДжава () который возвращает непреложный Список и следующий из них asJavaMutable ().
Вот пример, который демонстрирует непреложный Java- Список :
@Test(expected = UnsupportedOperationException.class) public void givenParams_whenVavrListConverted_thenException() { java.util.ListjavaList = List.of("Java", "Haskell", "Scala").asJava(); javaList.add("Python"); assertEquals(4, javaList.size()); }
Как Список является неизменным выполнения любой модификации на нем бросает НеподдерживаемаяОперацияЭксцепция .
Мы также можем получить Список ссылаясь на какJavaMutable () метод на список.
Вот как мы это делаем:
@Test public void givenParams_whenVavrListConvertedToMutable_thenRetunMutableList() { java.util.ListjavaList = List.of("Java", "Haskell", "Scala") .asJavaMutable(); javaList.add("Python"); assertEquals(4, javaList.size()); }
5. Преобразование между объектами Vavr
Подобно преобразованию между Java в Vavr и наоборот, мы можем преобразовать Значение типа в Vavr к другим Значение Типы. Эта функция преобразования помогает конверсии между объектами Vavr, когда есть необходимость.
Например, у нас есть Список элементов, и мы хотим, чтобы фильтровать дубликаты при сохранении порядка. В этом случае нам потребуется LinkedHashSet . Вот пример, который демонстрирует случай использования:
ListvavrList = List.of("Java", "Haskell", "Scala", "Java"); Set linkedSet = vavrList.toLinkedSet(); assertEquals(3, linkedSet.size()); assertTrue(linkedSet instanceof LinkedHashSet);
В интерфейсе Value доступно много других методов, которые помогают нам конвертировать коллекции в различные типы в зависимости от случаев использования.
Полный список API можно найти здесь .
6. Заключение
В этой статье мы узнали о преобразовании между типами коллекций Vavr и Java. Чтобы проверить больше API, предусмотренных для преобразования фреймворка в соответствии с случаем использования, обратитесь к JavaDoc и руководство пользователя .
Полный исходный код для всех примеров в этой статье можно найти более на Github .