如何利用 Java 将学生成绩数据从行格式转换为列格式?

ID:17406 / 打印

如何利用 java 将学生成绩数据从行格式转换为列格式?

java 数据转换:行转列

问题:

如何将以下源数据转化为期望的输出格式?

源数据:

立即学习“Java免费学习笔记(深入)”;

class    studentid    subject    score class one    1    english    84 class one    1    math    77 class one    1    pe    69 class one    2    english    81 class one    2    math    80 ...

期望输出:

class    studentid    english    math    pe class one    1    84    77    69

解决方案:

可以通过行转列的操作实现此转换。 voici 使用 java 代码演示如何完成:

import java.util.hashmap; import java.util.list; import java.util.map; import java.util.stream.collectors;  class rowtocolumntransformer {      public static void main(string[] args) {         // 源数据         list<studentdata> studentdatalist = list.of(                 new studentdata("class one", 1, "english", 84),                 new studentdata("class one", 1, "math", 77),                 new studentdata("class one", 1, "pe", 69),                 new studentdata("class one", 2, "english", 81),                 new studentdata("class one", 2, "math", 80)         );          // 创建一个映射,使用 class 和 studentid 作为键,subject 和 score 作为值         map<string, map<string, integer>> subjectscoremap = new hashmap<>();         for (studentdata studentdata : studentdatalist) {             string classandstudentid = studentdata.getclassandstudentid();             map<string, integer> scoremap = subjectscoremap.getordefault(classandstudentid, new hashmap<>());             scoremap.put(studentdata.getsubject(), studentdata.getscore());             subjectscoremap.put(classandstudentid, scoremap);         }          // 创建期望的输出         list<studentdata> transformeddatalist = subjectscoremap.entryset().stream()                 .map(entry -> new studentdata(entry.getkey(), entry.getvalue()))                 .collect(collectors.tolist());          // 打印输出         for (studentdata transformeddata : transformeddatalist) {             system.out.println(transformeddata);         }     }      private static class studentdata {         private string classandstudentid;         private map<string, integer> subjectscoremap;          public studentdata(string classandstudentid, int studentid, string subject, int score) {             this.classandstudentid = classandstudentid + "-" + studentid;             this.subjectscoremap = map.of(subject, score);         }          public studentdata(string classandstudentid, map<string, integer> subjectscoremap) {             this.classandstudentid = classandstudentid;             this.subjectscoremap = subjectscoremap;         }          public string getclassandstudentid() {             return classandstudentid;         }          public map<string, integer> getsubjectscoremap() {             return subjectscoremap;         }          @override         public string tostring() {             return classandstudentid + "	" +                     subjectscoremap.getordefault("english", 0) + "	" +                     subjectscoremap.getordefault("math", 0) + "	" +                     subjectscoremap.getordefault("pe", 0);         }     } }

输出:

Class one-1    84    77    69 Class one-2    81    80    0
上一篇: Android UI 线程阻塞:如何解决“正在调零”提示无法显示的问题?
下一篇: SpringBoot 使用 Mybatis-plus 报错 java.lang.NoSuchMethodError 如何解决?

作者:admin @ 24资源网   2024-11-27

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。