【问题标题】:How to convert LinkedHasMap Values into ArrayList/Array in right order?如何以正确的顺序将 LinkedHashMap 值转换为 ArrayList/Array?
【发布时间】:2019-10-14 16:29:58
【问题描述】:

我收到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)就行了?还是不行?
  • 请注意,您不必迭代键集来获取值:如果您希望键和值一起使用,则可以迭代 grades.entrySet(),如果您只想要值,则可以迭代 grades.values() .
  • 恐怕既然你已经清楚地说明了“正确的顺序”是什么意思,我们只能猜测“正确的顺序”是LinkedHashMap的条目的插入顺序.

标签: java arraylist collections hashmap linkedhashmap


【解决方案1】:

从网站找到解决方案。

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

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

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

【讨论】:

    【解决方案2】:

    首先要搞清楚的是原始类型:

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

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

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

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

    然后:

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

    【讨论】:

    • 如果我的编辑确实与您的意图相冲突,那么我很抱歉并随时恢复它,但这对我来说听起来很奇怪。
    【解决方案3】:

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

    将值放在List 中很简单:

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

    当然,要使其正常工作,您必须将 LinkedHashMap grades 更改为 LinkedHashMap grades&lt;KeyType,SomeType&gt;

    【讨论】:

    • 我原来的地图在Course课上,是private LinkedHashMap&lt;Student, ArrayList&lt;Integer&gt;&gt; grades;,是用来存储学生成绩的,所以里面有Student对象,成绩为ArrayList,他有。
    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 2019-05-17
    • 2019-04-10
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    相关资源
    最近更新 更多