Массовое преобразование массивов в связанные списки

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

Саид TreeMap выглядит так:

Map<Integer, LinkedList<String>> expected = new TreeMap<>();

Я заполнил указанную древовидную карту данными, которые должны вернуться из теста:

    expected.put(1, (LinkedList<String>) Arrays.asList("18_2_2_3_java.lang.String_", "27_0_0_93_java.sql.Timestamp_", "256_6_6_0_java.lang.String_", "200_6_6_12_java.lang.String_", "8_0_0_12_java.lang.String_", "4_2_2_5_java.lang.Integer_", "5_6_6_5_java.lang.Short_", "23_0_0_93_java.util.Date_", "5_0_0_5_java.lang.Integer_", "35_0_0_12_java.lang.String_", "20_6_6_0_java.lang.String_", "19_0_0_12_java.util.Date_", "12_6_6_12_java.lang.String_", "112_0_0_12_java.lang.String_", "1_0_0_5_java.lang.Short_", "4_0_0_2_java.lang.String_", "7_6_6_12_java.lang.String_", "3_0_0_5_java.lang.Integer_", "0_6_6_5_java.lang.Boolean_", "-1_0_0_2005_byte[]_", "19_6_6_1_java.lang.String_", "3_0_0_4_java.lang.String_", "4365_6_6_93_java.sql.Timestamp_", "0_6_6_5_java.lang.Integer_", "23_6_6_93_java.sql.Timestamp_", "1_250_250_12_java.lang.String_"));
    expected.put(2, (LinkedList<String>) Arrays.asList("2_6_6_12_java.lang.String_", "-1_6_6_2005_java.lang.String_", "20_0_0_12_java.lang.Long_", "25_0_0_12_java.lang.String_", "2_6_6_5_java.lang.Integer_", "500_0_0_12_java.lang.String_", "5_6_6_5_java.lang.Boolean_", "128_6_6_0_java.lang.String_", "512_6_6_12_java.lang.String_", "6_2_2_3_java.math.BigDecimal_", "25_6_6_12_java.lang.String_", "4_6_6_12_java.lang.String_", "19_6_6_0_java.lang.String_", "12_0_0_12_java.lang.String_", "1_6_6_5_java.lang.Boolean_", "2_0_0_5_java.lang.Short_", "50_6_6_12_java.lang.String_", "0_6_6_0_java.lang.Boolean_", "0_0_0_5_java.lang.Boolean_", "-1_6_6_-1_java.lang.String_", "4_0_0_12_java.lang.String_", "10_0_0_4_java.lang.Boolean_", "80_0_0_12_java.lang.String_", "20_8_8_3_java.math.BigDecimal_", "18_3_3_3_java.math.BigDecimal_"));
    expected.put(3, (LinkedList<String>) Arrays.asList("150_0_0_12_java.lang.String_", "0_6_6_0_java.sql.Timestamp_", "0_6_6_0_java.lang.Integer_", "1_0_0_5_java.lang.Boolean_", "32_6_6_12_java.lang.String_", "4_0_0_93_java.sql.Timestamp_", "2_0_0_12_java.lang.String_", "0_6_6_91_java.util.Date_"));
    expected.put(4, (LinkedList<String>) Arrays.asList("1024_6_6_1_java.lang.String_", "-1_6_6_-4_byte[]_", "30_6_6_12_java.lang.String_", "27_6_6_93_java.sql.Timestamp_", "40_0_0_12_java.lang.String_", "2_6_6_5_java.lang.String_", "2_2_2_5_java.lang.Short_", "2_0_0_4_java.lang.Integer_", "2000_6_6_12_java.lang.String_", "120_6_6_12_java.lang.String_", "4365_6_6_93_java.util.Date_", "256_6_6_12_java.lang.String_"));
//There is a lot more but you get the point

Как некоторые из вас, возможно, уже заметили; Списки неверны. Это должны быть связанные списки.

Eclipse рекомендовал приведение списка к связанному списку, что я и пробовал, но это не сработало.

Я очень растерялся в этом вопросе.

Почему LinkedList, а не List? Обычно нет причин ограничиваться одной реализацией списка. А если вам действительно нужны значения как LinkedList, просто используйте соответствующий конструктор — new LinkedList<>(Arrays.asList(values here)).

Chaosfire 12.03.2024 16:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
57
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ты мог бы сделать

LinkedList<String> list = Stream.of("one", "two", "three").collect(Collectors.toCollection(LinkedList::new));

или

LinkedList<String> list = new LinkedList<>(List.of("one", "two", "three"));

Первый создает LinkedList, второй создает значение по умолчанию (вероятно, массив) List, затем на его основе создает LinkedList.

John Bayko 12.03.2024 17:12

Первый создает Stream, поддерживаемый массивом, а затем собирает его в LinkedList. Второй создает List, поддерживаемый массивом (вероятно ArrayList), а затем создает из него LinkedList.

lance-java 12.03.2024 17:57
Ответ принят как подходящий

Предложения lance-java будут работать, но они довольно громоздки.

Я бы предложил определить такой метод:

public static LinkedList<String> linkedList(String... values) {
  return new LinkedList<>(List.of(values));
}

а затем вызовите это в своем тесте:

expected.put(1, linkedList("18_2_2_3_java.lang.String_", "27_0_0_93_java.sql.Timestamp_" /* etc */);
// etc

Это просто немного аккуратнее.

Спасибо, обязательно попробую. Что делает (String...? Я никогда не видел ничего подобного.

th0sf4n 12.03.2024 16:44

@th0sf4n переменное количество аргументов строкового типа.

WJS 12.03.2024 16:51

Чтобы уточнить, переменное количество конечных аргументов (String...values) в Java реализовано как один массив. Это означает, что вы действительно можете передать массив в позиции последнего аргумента, если он у вас есть, а не отдельные параметры.

John Bayko 12.03.2024 17:07

@th0sf4n см. «Произвольное количество аргументов» в учебнике по Java.

Andy Turner 12.03.2024 17:43

Eclipse рекомендовал приведение списка к связанному списку, что я и пробовал, но это не сработало.

expected.put(1, (LinkedList<String>) Arrays.asList("18_2_2_3_java.lang.String_",
                ^^^^^^^^^^^^^^^^^^^^ ~ !!

Вы не можете преобразовать ArrayList в LinkedList. Вам нужно создать новый LinkedList и передать список конструктору следующим образом:

expected.put(1, new LinkedList<String>(Arrays.asList("18_2_2_3_java.lang.String_", "27_0_0_93_

Более подробную информацию см. в реализации Arrays.asList.

Вы также можете использовать List.of вместо Arrays.asList.

Другие вопросы по теме