Перейти к содержимому

Как разделить массив на две части java

  • автор:

Объединение и разделение массивов и коллекций в 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *