Объединение и разделение массивов и коллекций в Java
В этом кратком руководстве мы узнаем, как объединять и разделять массивы и коллекции в Java, эффективно используя новую поддержку потоков .
2. Объедините два массива
Начнем с объединения двух массивов с помощью Stream.concat :
@Test public void whenJoiningTwoArrays_thenJoined() String[] animals1 = new String[] "Dog", "Cat" >; String[] animals2 = new String[] "Bird", "Cow" >; String[] result = Stream.concat( Arrays.stream(animals1), Arrays.stream(animals2)).toArray(String[]::new); assertArrayEquals(result, new String[] "Dog", "Cat", "Bird", "Cow" >); >
3. Объедините две коллекции
Давайте сделаем то же самое соединение с двумя коллекциями:
@Test public void whenJoiningTwoCollections_thenJoined() CollectionString> collection1 = Arrays.asList("Dog", "Cat"); CollectionString> collection2 = Arrays.asList("Bird", "Cow", "Moose"); CollectionString> result = Stream.concat( collection1.stream(), collection2.stream()) .collect(Collectors.toList()); assertTrue(result.equals(Arrays.asList("Dog", "Cat", "Bird", "Cow", "Moose"))); >
4. Объедините две коллекции с помощью фильтра
Теперь давайте объединим две коллекции чисел, отфильтровав все, что больше 10:
@Test public void whenJoiningTwoCollectionsWithFilter_thenJoined() CollectionString> collection1 = Arrays.asList("Dog", "Cat"); CollectionString> collection2 = Arrays.asList("Bird", "Cow", "Moose"); CollectionString> result = Stream.concat( collection1.stream(), collection2.stream()) .filter(e -> e.length() == 3) .collect(Collectors.toList()); assertTrue(result.equals(Arrays.asList("Dog", "Cat", "Cow"))); >
5. Присоедините массив к строке
Затем давайте присоединим массив к строке с помощью коллектора:
@Test public void whenConvertArrayToString_thenConverted() String[] animals = new String[] "Dog", "Cat", "Bird", "Cow" >; String result = Arrays.stream(animals).collect(Collectors.joining(", ")); assertEquals(result, "Dog, Cat, Bird, Cow"); >
6. Присоедините коллекцию к строке
Давайте сделаем то же самое, но с Collection :
@Test public void whenConvertCollectionToString_thenConverted() CollectionString> animals = Arrays.asList("Dog", "Cat", "Bird", "Cow"); String result = animals.stream().collect(Collectors.joining(", ")); assertEquals(result, "Dog, Cat, Bird, Cow"); >
7. Присоедините карту к строке
Далее давайте создадим String из Map .
Процесс очень похож на предыдущие примеры, но здесь у нас есть дополнительный шаг, чтобы сначала присоединиться к каждой записи карты : «
@Test public void whenConvertMapToString_thenConverted() MapInteger, String> animals = new HashMap>(); animals.put(1, "Dog"); animals.put(2, "Cat"); animals.put(3, "Cow"); String result = animals.entrySet().stream() .map(entry -> entry.getKey() + " = " + entry.getValue()) .collect(Collectors.joining(", ")); assertEquals(result, "1 = Dog, 2 = Cat, 3 = Cow"); >
8. Объедините вложенные коллекции в строку
Давайте сделаем что-нибудь посложнее. Давайте объединим несколько вложенных коллекций в String .
В следующем примере мы сначала объединяемся внутри каждой вложенной коллекции, а затем объединяем результат каждой из них:
@Test public void whenConvertNestedCollectionToString_thenConverted() CollectionListString>> nested = new ArrayList>(); nested.add(Arrays.asList("Dog", "Cat")); nested.add(Arrays.asList("Cow", "Pig")); String result = nested.stream().map( nextList -> nextList.stream() .collect(Collectors.joining("-"))) .collect(Collectors.joining("; ")); assertEquals(result, "Dog-Cat; Cow-Pig"); >
9. Обрабатывайте нулевые значения при присоединении
Давайте посмотрим, как мы можем использовать фильтр , чтобы пропустить любые нулевые значения:
@Test public void whenConvertCollectionToStringAndSkipNull_thenConverted() CollectionString> animals = Arrays.asList("Dog", "Cat", null, "Moose"); String result = animals.stream() .filter(Objects::nonNull) .collect(Collectors.joining(", ")); assertEquals(result, "Dog, Cat, Moose"); >
10. Разделите коллекцию на две части
Давайте разделим коллекцию чисел на две коллекции посередине:
@Test public void whenSplitCollectionHalf_thenConverted() CollectionString> animals = Arrays.asList( "Dog", "Cat", "Cow", "Bird", "Moose", "Pig"); CollectionString> result1 = new ArrayList>(); CollectionString> result2 = new ArrayList>(); AtomicInteger count = new AtomicInteger(); int midpoint = Math.round(animals.size() / 2); animals.forEach(next -> int index = count.getAndIncrement(); if (index midpoint) result1.add(next); > else result2.add(next); > >); assertTrue(result1.equals(Arrays.asList("Dog", "Cat", "Cow"))); assertTrue(result2.equals(Arrays.asList("Bird", "Moose", "Pig"))); >
11. Разделить массив по длине слова
Далее разобьем массив по длине слов:
@Test public void whenSplitArrayByWordLength_thenConverted() String[] animals = new String[] "Dog", "Cat", "Bird", "Cow", "Pig", "Moose">; MapInteger, ListString>> result = Arrays.stream(animals) .collect(Collectors.groupingBy(String::length)); assertTrue(result.get(3).equals(Arrays.asList("Dog", "Cat", "Cow", "Pig"))); assertTrue(result.get(4).equals(Arrays.asList("Bird"))); assertTrue(result.get(5).equals(Arrays.asList("Moose"))); >
12. Разделить строку на массив
Давайте теперь сделаем наоборот, давайте разделим строку на массив:
@Test public void whenConvertStringToArray_thenConverted() String animals = "Dog, Cat, Bird, Cow"; String[] result = animals.split(", "); assertArrayEquals(result, new String[] "Dog", "Cat", "Bird", "Cow" >); >
13. Разделить строку на коллекцию
Этот пример похож на предыдущий, только для преобразования из массива в коллекцию требуется дополнительный шаг :
@Test public void whenConvertStringToCollection_thenConverted() String animals = "Dog, Cat, Bird, Cow"; CollectionString> result = Arrays.asList(animals.split(", ")); assertTrue(result.equals(Arrays.asList("Dog", "Cat", "Bird", "Cow"))); >
14. Разделить строку на карту
Теперь давайте создадим карту из строки . Нам нужно будет разбить нашу строку дважды, один раз для каждой записи и последний раз для ключа и значений:
@Test public void whenConvertStringToMap_thenConverted() String animals = "1 = Dog, 2 = Cat, 3 = Bird"; MapInteger, String> result = Arrays.stream( animals.split(", ")).map(next -> next.split(" = ")) .collect(Collectors.toMap(entry -> Integer.parseInt(entry[0]), entry -> entry[1])); assertEquals(result.get(1), "Dog"); assertEquals(result.get(2), "Cat"); assertEquals(result.get(3), "Bird"); >
15. Разделить строку с несколькими разделителями
Наконец, давайте разделим строку с несколькими разделителями с помощью регулярного выражения, мы также удалим все пустые результаты:
@Test public void whenConvertCollectionToStringMultipleSeparators_thenConverted() String animals = "Dog. , Cat, Bird. Cow"; CollectionString> result = Arrays.stream(animals.split("[,|.]")) .map(String::trim) .filter(next -> !next.isEmpty()) .collect(Collectors.toList()); assertTrue(result.equals(Arrays.asList("Dog", "Cat", "Bird", "Cow"))); >
16. Заключение
В этом руководстве, используя простую функцию String.split и мощный поток Java 8 , мы показали, как объединять и разделять массивы и коллекции.
Вы можете найти код для этой статьи на GitHub .
- 1. Обзор
- 2. Объедините два массива
- 3. Объедините две коллекции
- 4. Объедините две коллекции с помощью фильтра
- 5. Присоедините массив к строке
- 6. Присоедините коллекцию к строке
- 7. Присоедините карту к строке
- 8. Объедините вложенные коллекции в строку
- 9. Обрабатывайте нулевые значения при присоединении
- 10. Разделите коллекцию на две части
- 11. Разделить массив по длине слова
- 12. Разделить строку на массив
- 13. Разделить строку на коллекцию
- 14. Разделить строку на карту
- 15. Разделить строку с несколькими разделителями
- 16. Заключение
Разделение массива на две равные части в Java
Используя метод copyOfRange() вы можете скопировать массив в пределах диапазона. Этот метод принимает три параметра, массив, который вы хотите скопировать, начало и конец индексов диапазона.
Вы можете разделить массив на две равные части с помощью этого метода путем копирования массива в диапазоне от 0 до длины / 2 до одного массива и длины / 2 к длине другой. Приведем пример, разделения массива пополам.
Пример
import java.util.Arrays; import java.util.Scanner; public class SplittingAnArray < public static void main(String args[]) < Scanner s =new Scanner(System.in); System.out.println("Enter the required size of the array ::"); int size = s.nextInt(); int [] myArray = new int[size]; System.out.println("Enter elements of the array"); for(int i=0; i< size; i++) < myArray[i] = s.nextInt(); >System.out.println(Arrays.toString(myArray)); int[] myArray1 = Arrays.copyOfRange(myArray, 0, myArray.length/2); int[] myArray2 = Arrays.copyOfRange(myArray, myArray.length/2, myArray.length); System.out.println("First half of the array:: "+Arrays.toString(myArray1)); System.out.println("First second of the array:: "+Arrays.toString(myArray2)); > >
Итог
Enter the required size of the array :: 6 Enter elements of the array 45 63 78 96 42 19 [45, 63, 78, 96, 42, 19] First half of the array:: [45, 63, 78] First second of the array:: [96, 42, 19]
Средняя оценка 3.3 / 5. Количество голосов: 7
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.
помогите решить товарищи
Реализуй метод main(String[]) , который делит массив array на два подмассива и заполняет ими двумерный массив result . Если длина массива нечетная, то большую часть нужно скопировать в первый подмассив.
Для разделения массива используй метод Arrays.copyOfRange(int[], int, int) . Порядок элементов не меняй.
При тестировании значения полей класса Solution будут разными, учти это.
Требования:
Реализуй метод main(String[]) согласно условию.
Solution.java
- Solution.java
Комментарии (12)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Уровень 31
3 апреля 2021, 13:45

Уровень 26
3 апреля 2021, 13:53
А если использовать формулу которую написал ниже Гофф то решение выйдет в две строки и без if/else, так как она будет делить массив пополам независимо от четности
Уровень 20
3 апреля 2021, 13:42
Нет необходимости проверять на чётность, что бы найти середину. Можно найти универсальную формулу. Вот, на выбор: середина = (длина + 1) / 2 середина = длина — длина / 2 середина = длина / 2 + (длина & 1)
Уровень 31
3 апреля 2021, 14:14
не пойму как это реализовать
Уровень 29
3 апреля 2021, 13:24
зачем делите длину result массива? Он возьмет столько, сколько ему нужно по условию, не переживайте))
Уровень 31
3 апреля 2021, 13:51
result[0] result[1] Так?
Уровень 29
3 апреля 2021, 14:05
вот я так же решил как и на вашем скрине выше)
Уровень 31
3 апреля 2021, 14:11
мой ответ не принимается
Уровень 29
3 апреля 2021, 14:16
удалите 18 строку, у вас же есть проинициализированный массив array
Уровень 31
3 апреля 2021, 14:17
спасибо,решил
Уровень 18
3 апреля 2021, 13:19
Вы, в 21 строке, длину какого массива на чётность проверяете?
if (result.length % 2 == 0)
Уровень 31
3 апреля 2021, 13:48
- Курсы программирования
- Регистрация
- Курс Java
- Помощь по задачам
- Цены
- Задачи-игры
Сообщество
JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Как разбить массив на два списка по разделителю
Можно пройтись по всем элементам массива, разбить каждый на части по символу = , после чего сохранить полученные части в соответствующие списки:
String[] array = < "АР Крым=1", "Винницкая область=2" >; List regions = new ArrayList<>(); List indices = new ArrayList<>(); for (String str : array)
Отслеживать
ответ дан 28 июн 2017 в 7:22
19.1k 6 6 золотых знаков 30 30 серебряных знаков 44 44 бронзовых знака
Большое спасибо.
28 июн 2017 в 7:47
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.