Преобразувания на Java IntStream

1. Въведение

В този бърз урок ще разгледаме всички възможности по отношение на преобразуването на IntStream към други типове .

Като допълнение към този урок се препоръчват интересни четения за бокса и разопаковането или итерацията.

2. IntStream към масив

Нека започнем да изследваме как можем да конвертираме от обект IntStream в масив от int s .

В името на този пример, нека генерираме първите 50 четни числа и ги съхраняваме в масив като резултат:

@Test public void intStreamToArray() { int[] first50EvenNumbers = IntStream.iterate(0, i -> i + 2) .limit(50) .toArray(); assertThat(first50EvenNumbers).hasSize(50); assertThat(first50EvenNumbers[2]).isEqualTo(4); }

Първо, нека създадем безкраен поток от цели числа, започващи от 0 и итериращи, като добавим 2 към всеки елемент. Непосредствено след това трябва да добавим междинен лимит на операцията , за да направим тази операция някак завършваща.

И накрая, нека използваме прекратяващата операция събиране, за да съберем този поток в масив.

Това е пряк начин за генериране на масив от int s .

3. IntStream към списък

Нека превръщат в момента на IntStream към Списък на цели числа .

В този случай, само за да добавим повече разнообразие към примера, нека използваме обхвата на метода вместо итерацията на метода . Този метод ще генерира IntStream от int 0 до int 50 (не е включен, тъй като е отворен диапазон):

@Test public void intStreamToList() { List first50IntegerNumbers = IntStream.range(0, 50) .boxed() .collect(Collectors.toList()); assertThat(first50IntegerNumbers).hasSize(50); assertThat(first50IntegerNumbers.get(2)).isEqualTo(2); }

В този пример използваме диапазона от методи . Най-известната част тук е използването на метода boxed , който, както посочва името му, ще постави всички елементи int в IntStream и ще върне поток .

И накрая, можем да използваме колектор, за да получим списък с цели числа s.

4. IntStream към String

За последната ни тема, нека да проучи как бихме могли да получите по- String от IntStream .

В този случай ще генерираме само първите 3 int s (0, 1 и 2):

@Test public void intStreamToString() { String first3numbers = IntStream.of(0, 1, 2) .mapToObj(String::valueOf) .collect(Collectors.joining(", ", "[", "]")); assertThat(first3numbers).isEqualTo("[0, 1, 2]"); }

Първо, в този случай ние конструираме IntStream с конструктора IntStream.of () . След като имаме Stream , трябва по някакъв начин да генерираме Stream от IntStream . Следователно можем да използваме междинния метод mapToObj , който ще вземе IntStream и ще върне поток от типа на получения обект, картографиран в метода, наречен.

И накрая, ние използваме колекторното присъединяване, което поема поток и можем да добавим всеки елемент от потока, като използваме разделител и по желание префикс и суфикс.

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

В този бърз урок разгледахме всички алтернативи, когато трябва да конвертираме IntStream към всеки друг тип. По-конкретно, преминахме през примери като генериране на масив, списък и низ .

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