Копиране на колекции в Java

1. Въведение

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

Операцията „ zip“ е малко по-различна от стандартната „concat“ или „merge“ . Докато операциите “concat” или “merge” просто ще добавят новата колекция в края на съществуващата колекция, операцията “ zip” ще вземе елемент от всяка колекция и ще ги комбинира.

Основната библиотека не поддържа „ zip“ имплицитно, но със сигурност има библиотеки на трети страни, които предлагат тази полезна операция.

Помислете за два списъка, единият има имена на хора, а други съдържа тяхната възраст.

List names = 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. Използване на потоци Guava

От версия 21, Google Guava предоставя zip помощен метод в класа Streams . Това премахва цялата суматоха при създаването и картографирането на индекси и намалява синтаксиса на входове и операции:

Streams .zip(names.stream(), ages.stream(), (name, age) -> name + ":" + age) // ...

4. Използване на jOOλ (jOOL)

jOOL предоставя и някои от очарователните допълнения над Java 8 Lambda, а с подкрепата на Tuple1 до Tuple16, операцията zip става много по-интересна:

Seq .of("John","Jane", "Dennis") .zip(Seq.of(24,25,27));

Това ще доведе до резултат от Seq, съдържащ Tuples от цип елементи:

(tuple(1, "a"), tuple(2, "b"), tuple(3, "c"))

Методът на zOOL zip дава гъвкавост за предоставяне на функция за трансформация по избор:

Seq .of(1, 2, 3) .zip(Seq.of("a", "b", "c"), (x, y) -> x + ":" + y);

или ако някой иска да компресира само с индекс, той може да използва метода zipWithIndex , предоставен от jOOL:

Seq.of("a", "b", "c").zipWithIndex();

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

В този бърз урок разгледахме как да извършим цип операцията.

Както винаги, примерите за кодове в статията могат да бъдат намерени в GitHub.