Преобразование массива в список

В методе get_array() у меня уже создан массив, но я хочу вернуть его в виде списка, чтобы он назначал в соответствии с правилами списка, а не правилами массива. Массив, конечно, обычно будет построен более сложным способом (не непосредственно из списка).

Я попытался использовать карту в надежде, что она вернет мне список значений, но это дает те же результаты. То же самое с split/join.

Как преобразовать массив в список значений?

arrays list perl scalar

3 ответа

Ответ с wantarray делает намерение явным, что хорошо. Но если вы хотите что-то похожее на волшебство, которое вы можете назвать "перечислением массива", чтобы запутать и произвести впечатление на людей, срез сделает это:

5 Sean [2016-01-09 00:00:00]

Функции могут использовать wantarray для определения контекста, в котором они находятся, и возвращать что-то соответственно:

0 7stud [2016-01-09 03:26:00]

Двоичный "," является оператором запятой. В скалярном контексте он вычисляет левый аргумент, выдает это значение, затем оценивает его правый аргумент и возвращает это значение. Это похоже на C-запятую.

И см. Конструкторы list value constructors perldata:

В контексте, не требующем значения списка, значение того, что представляется литералом списка, является просто значением конечного элемента, как и для оператора C-запятой. Например,

присваивает целое значение списка массиву @foo, но

присваивает значение переменной $ bar скалярной переменной $ foo. Обратите внимание, что значение фактического массива в скалярном контексте — это длина массива;

Оценивает BLOCK или EXPR для каждого элемента LIST (локально устанавливая $ _ для каждого элемента) и возвращает значение списка, состоящее из результатов каждой такой оценки.

Читайте также  Прохождение игры подиум академия моды

Отлично! Просто, что вы хотите:

В скалярном контексте [map] возвращает общее количество сформированных таким образом элементов.

Итак, после прочтения ответа Шона вы можете предположить, что map() определена как эквивалент следующего:

То же самое для split:

Разделяет строку EXPR в список строк и возвращает список в контексте списка или размер списка в скалярном контексте.

Автор: cyber_1 ← к списку ← →

Например вы не знаете как отсортировать лист чисел и не хотите писать сортировку для листа, то очень удобно произвести конвертирование с листа в массив, вызвать сортировку для массива, и осталось вернутся обратного к листу. самый очевидный способ использовать циклы, но допустим вам сказали обойтись без циклов и ваших подпрограмм.

Существует ли метод для преобразования такого типа: int[] -> ArrayList . Если да, назовите его.

Такой метод существует, Arrays.asList(T. arr) , только загвоздка в том что он работает для объектов, а если хотите привести int[], от нужно скомбинировать:

правда ArrayUtils — это уже библиотека Apache, если же вы не используете эту библиотеку, вам нужно привести массив чисел к массиву объектов циклом, а в этом случаем луче сразу добавлять элементы в лист.

А если использовать объекты, то все работает все хорошо

Если Вам понравился вопрос, проголосуйте за него

Голосов: 61 Голосовать

как преобразовать массив в список на Java?

я использовал Arrays.asList() но поведение (и подпись) как-то изменилось с Java SE 1.4.2 (документы теперь в архиве) к 8 и большинство фрагментов, которые я нашел в интернете, используют поведение 1.4.2.

  • on 1.4.2 возвращает список, содержащий элементы 1, 2, 3
  • на 1.5.0+ возвращает список, содержащий массив спам

во многих случаях это должно быть легко обнаружить, но иногда она может проскользнуть незамеченной:

17 ответов

в вашем примере это потому, что вы не можете иметь список примитивного типа. Другими словами, List не возможно. Вы можете, однако, иметь List .

Читайте также  Прошивка модема ошибка 19

это работает, как ожидалось.

проблема в том, что varargs был представлен в Java5 и, к сожалению, Arrays.asList() перегружен версией vararg. Так что Arrays.asList(spam) понимается компилятором Java5 как параметр vararg массивов int.

эта проблема объясняется более подробно в эффективном Java 2nd Ed. Глава 7, Пункт 42.

говоря о способе преобразования, это зависит от того, зачем вам нужен ваш List . Если вам нужно просто прочитать данные. ОК, Вот так:

но тогда, если вы делаете что-то вроде этого:

вы получаете java.lang.UnsupportedOperationException . Поэтому для некоторых случаев вам даже нужно это:

первый подход фактически не преобразует массив, но "представляет" его как List . Но массив находится под капотом со всеми его свойствами, такими как фиксированное количество элементов. Пожалуйста, обратите внимание, вы необходимо указать тип при построении ArrayList .

в Java 8 вы можете использовать streams:

кажется, немного поздно, но вот мои два цента. Мы не можем иметь List as int является примитивным типом, поэтому мы можем иметь только List .

Java 8 (int array)

Java 8 и ниже (целочисленный массив)

нужен ArrayList, а не список?

в случае, если мы хотим конкретную реализацию List например ArrayList затем мы можем использовать toCollection as:

почему list21 не может быть структурно модифицированных?

при использовании Arrays.asList размер возвращаемого списка фиксирован, потому что возвращаемый список не java.util.ArrayList , но частный статический класс, определенный внутри java.util.Arrays . Поэтому, если мы добавим или удалим элементы из возвращаемого списка, UnsupportedOperationException будет брошен. Поэтому мы должны пойти с list22 когда мы хотим изменить список. Если у нас есть Java8, то мы также можем пойти с list23 .

для ясности list21 может быть изменен в том смысле, что мы можем вызвать list21.set(index,element) но этот список не может быть структурно изменен, т. е. не может добавлять или удалять элементы из списка. Вы также можете проверить это вопрос.

Читайте также  Производная sin 2x в квадрате

если мы хотим неизменяемый список, то мы можем обернуть его как:

еще один момент, чтобы отметить, что метод Collections.unmodifiableList возвращает неизменяемое представление указанного списка. Немодифицируемая коллекция представлений-это немодифицируемая коллекция, а также представление резервной коллекции. Заметить что изменения в резервной коллекции все еще могут быть возможны, и если они происходят, они видны через немодифицируемое представление.

у нас может быть действительно неизменяемый список в Java 10.

Java 10 (действительно неизменяемый список) двумя способами:

  1. List.copyOf(Arrays.asList(integers))
  2. Arrays.stream(integers).collect(Collectors.toUnmodifiableList());

также проверьте это ответ шахты для более.

недавно мне пришлось преобразовать массив в список. Позже программа отфильтровала список, пытаясь удалить данные. При использовании массивов.функция asList(array), вы создаете коллекцию фиксированного размера: вы не можете ни добавлять, ни удалять. Эта запись объясняет проблему лучше, чем я: почему я получаю исключение UnsupportedOperationException при попытке удалить элемент из списка?.

в конце концов, мне пришлось сделать "ручное" преобразование:

I предположим, я мог бы добавить преобразование из массива в список, используя список.операция addAll (items).

Использование Массивов

это самый простой способ преобразовать массив в List . Однако при попытке добавить новый элемент или удалить существующий элемент из списка, UnsupportedOperationException будет брошен.

использование ArrayList или других реализаций списка

можно использовать for цикл для добавления всех элементов массива в List реализации, например, ArrayList :

использование Stream API в Java 8

вы можно превратить массив в поток, а затем собрать поток с помощью разных коллекторов: коллектор по умолчанию в Java 8 использует ArrayList за экраном, но вы также можете наложить предпочтительную реализацию.

если вы нацелены на Java 8( или более поздней версии), вы можете попробовать следующее:

обратите внимание Collectors. toList() , этот общий метод поможет вам избежать ошибки " тип несоответствия: не удается преобразовать из List to List ".

другой обходной путь, если вы используете Apache commons-lang:

Ссылка на основную публикацию
Adblock
detector