В настоящее время я пишу тест 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<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.
Первый создает Stream, поддерживаемый массивом, а затем собирает его в LinkedList. Второй создает List, поддерживаемый массивом (вероятно ArrayList), а затем создает из него LinkedList.
Предложения 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 переменное количество аргументов строкового типа.
Чтобы уточнить, переменное количество конечных аргументов (String...values) в Java реализовано как один массив. Это означает, что вы действительно можете передать массив в позиции последнего аргумента, если он у вас есть, а не отдельные параметры.
@th0sf4n см. «Произвольное количество аргументов» в учебнике по Java.
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.
Почему
LinkedList, а неList? Обычно нет причин ограничиваться одной реализацией списка. А если вам действительно нужны значения какLinkedList, просто используйте соответствующий конструктор —new LinkedList<>(Arrays.asList(values here)).