1. введение
В этом уроке мы проиллюстрируем, как объединить две коллекции в одну логическую коллекцию.
Операция “ zip” немного отличается от стандартной операции “конкат” или “слияние” . В то время как операции “конкат” или “слияние” просто добавят новую коллекцию в конце существующей коллекции, операция ” zip” возьмет элемент из каждой коллекции и объединит их.
Основная библиотека не поддерживает ” zip” неявно, но, безусловно, существуют сторонние библиотеки, которые выполняют эту полезную операцию.
Рассмотрим два списка, в одном из которых есть имена людей, а в другом-их возраст.
Listnames = new ArrayList<>(Arrays.asList("John", "Jane", "Jack", "Dennis")); List ages = new ArrayList<>(Arrays.asList(24, 25, 27));
После архивирования мы получаем пары имя-возраст, построенные из соответствующих элементов из этих двух коллекций.
2. Использование Java 8 IntStream
Используя ядро Java, мы могли бы генерировать индексы с помощью IntStream , а затем использовать их для извлечения соответствующих элементов из двух коллекций:
IntStream .range(0, Math.min(names.size(), ages.size())) .mapToObj(i -> names.get(i) + ":" + ages.get(i)) // ...
3. Использование потоков Гуавы
Начиная с версии 21, Google Guava предоставляет вспомогательный метод zip в классе Streams . Это устраняет всю суету создания и сопоставления индексов и сводит синтаксис к входным данным и операциям:
Streams .zip(names.stream(), ages.stream(), (name, age) -> name + ":" + age) // ...
4. Использование jOOλ (jOOL)
joomla также предоставляет некоторые интересные дополнения по сравнению с Java 8 Lambda, и с поддержкой Tuple 1 to Tuple16 операция zip становится намного интереснее:
Seq .of("John","Jane", "Dennis") .zip(Seq.of(24,25,27));
Это приведет к результату Seq , содержащему Кортежи заархивированных элементов:
(tuple(1, "a"), tuple(2, "b"), tuple(3, "c"))
Метод zip jOOL обеспечивает гибкость для предоставления пользовательской функции преобразования:
Seq .of(1, 2, 3) .zip(Seq.of("a", "b", "c"), (x, y) -> x + ":" + y);
или, если кто-то хочет использовать только zipwithindex, он может использовать метод zipWithIndex , предоставленный joomla:
Seq.of("a", "b", "c").zipWithIndex();
5. Заключение
В этом кратком руководстве мы рассмотрели, как выполнить операцию zip .
Как всегда, примеры кода в статье можно найти на GitHub .