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

时间:2019-05-29 06:14:49

标签: java arraylist collections hashmap linkedhashmap

我得到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]

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

3 个答案:

答案 0 :(得分:4)

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

将值放入List很简单:

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

当然,要使其正常工作,您必须将LinkedHashMap grades更改为LinkedHashMap grades<KeyType,SomeType>

答案 1 :(得分:1)

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

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

即使您仅使用?,您也需要变量类型上的泛型类型:

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

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

然后:

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

答案 2 :(得分:0)

从网站上找到解决方案。

如果 grades 是一个 LinkedHashMap<String, String>,下面的代码可以起到作用。

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

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