Как преобразовать значения LinkedHasMap в ArrayList / Array в правильном порядке? - PullRequest
3 голосов
/ 29 мая 2019

Я получаю LinkedHashMap grades = courses.get(choise).getGrades();

Мне нужно сохранить значения оценок в массиве / массиве.

Я могу получить значения и ключи в цикле

String key = "";
String value = "";
for (Object o : grades.keySet()){
  key = o.toString();
  value = grades.get(o).toString();
}

И распечатай так

System.out.println("Grades: " + value);

Пример вывода

Grades:[0, 3, 2, 5, 3]

Моя цель - разделить каждую оценку в массиве / списке.

Ответы [ 2 ]

4 голосов
/ 29 мая 2019

Вам не нужно беспокоиться о заказе.Получите ли вы values() или keySet() или entrySet() из LinkedHashMap, порядок итераций любого из них будет соответствовать порядку вставки в LinkedHashMap.

List это так же просто, как:

List<SomeType> grades = new ArrayList<>(grades.values());

Конечно, чтобы это работало, вы должны изменить LinkedHashMap grades на LinkedHashMap grades<KeyType,SomeType>.

1 голос
/ 29 мая 2019

Первое, что вы должны отсортировать, это тип raw:

LinkedHashMap grades = courses.get(choise).getGrades();

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

LinkedHashMap<?, ?> grades = courses.get(choise).getGrades();

но если вы знаете более конкретный тип, чем ?, вы можете использовать его - из вопроса видно, что ваши ключи, по крайней мере, являются строками.

Тогда:

List<String> list = 
    grades.values().stream()
        .map(Object::toString)
        .collect(Collectors.toList());
...