如何以正确的顺序将LinkedHasMap值转换为ArrayList/Array



我正在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]

我的目标是将每个年级分隔在一个数组/列表中。

您不必担心顺序。无论您是从LinkedHashMap获得values()还是keySet()entrySet(),其中任何一个的迭代顺序都将根据插入LinkedHashMap的顺序。

将值放入List非常简单,如下所示:

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

当然,要做到这一点,您必须将LinkedHashMap grades更改为 LinkedHashMap grades<KeyType,SomeType> .

首先要整理的是原始类型:

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

您需要变量类型上的泛型类型,即使您只使用 ?

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

但是如果你知道比?更具体的类型,你可以使用它 - 从问题来看,你的键至少是字符串。

然后:

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

从网站上找到解决方案。

如果提供gradesLinkedHashMap<String, String>,则以下代码可以解决问题。

String[] arrayGrades = grades.keySet().toArray(new String[0]);

代码在JavaVersion.VERSION_1_8环境中进行了测试。

最新更新