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

4

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

我的目标是将每个等级分开成一个数组/列表。


在列表上调用 list.add(value) 吗?还是不调用? - UninformedUser
请注意,您不必通过迭代键集来获取值:如果您想要同时获得键和值,则可以迭代grades.entrySet(),或者如果您只想要值,则可以使用grades.values() - Andy Turner
很抱歉,由于您没有明确说明“正确的顺序”是什么,我们只能猜测“正确的顺序”是指LinkedHashMap中条目的插入顺序。 - Stephen C
3个回答

4

您无需担心顺序。无论您从LinkedHashMap获取values()keySet()还是entrySet(),它们的迭代顺序都将根据插入顺序进行。

将值放入List中就像这样简单:

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

当然,要使其生效,你需要将LinkedHashMap grades更改为LinkedHashMap grades<KeyType,SomeType>

我的原始映射是在Course类中,它是private LinkedHashMap <Student,ArrayList <Integer>> grades;,用于存储学生的成绩,因此它包含具有ArrayList的Student对象和他所拥有的成绩。 - G. Dawid

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());

如果我的修改与您的意图冲突,那么我非常抱歉,请随意撤销它,但对我来说,它听起来很奇怪。 - Lino

0
在一个网站上找到了解决方案。
如果提供了gradesLinkedHashMap<String,String>,下面的代码就可以解决问题。
String[] arrayGrades = grades.keySet().toArray(new String[0]);

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接