Java集合中如何解决数据分类汇总的问题(需要高手解决)

cengxiong cengxiong 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我从数据库中查询出来的数据是一个集合,要对数据进行分类汇总

xm kc math chinese
--------------------
张三 语文 65 95
李四 数学 75 80
李四 语文 80 40
李四 语文 80 40


最后要显示的效果是


xm kc 一学期 二学期
--------------------
张三 语文 65 95
语文 65 95
张三 65 95
李四 数学 75 80
数学 75 80
李四 语文 80 40
李四 语文 80 40
语文 160 80
李四 235 160
总计 295 255

//////////////////////////////////////////////////////////
我自己大概写了个方法出来,还没完全实现
希望大家帮帮我,看看是否能用递归实现呀
Test.java
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

List li=new ArrayList();
//第一个学生
Student ww=new Student();
ww.setName("ww");
ww.setChinese(95);
ww.setMath(65);

//第二个学生
Student zx=new Student();
zx.setName("zx");
zx.setChinese(80);
zx.setMath(75);

//第三个学生
Student zxa=new Student();
zxa.setName("zx");
zxa.setChinese(40);
zxa.setMath(80);

//第四个学生
Student yy=new Student();
yy.setName("yy");
yy.setChinese(40);
yy.setMath(80);

li.add(ww);
li.add(zx);
li.add(zxa);
li.add(yy);

int m = 0;
int c = 0;
String str="";
List list = new ArrayList();
for(int i=0;i<li.size();i++)
{

Student real=(Student)li.get(i);

if(i==0)
{
m=real.getMath();
c=real.getChinese();
str=real.getName();
list.add(real);
}
else if(real.getName().equals(str)) //是否可以是动态的,不固定某个属性
{
m+=real.getMath();
c+=real.getChinese();
list.add(real);
}
else
{
Student Nstb=new Student();
Nstb.setName(str);
Nstb.setMath(m);
Nstb.setChinese(c);
list.add(Nstb);

str=real.getName();
c=real.getChinese();
m=real.getMath();
list.add(real);
}
if(li.size()-1==i)
{
Student Nstb=new Student();
Nstb.setName(str);
Nstb.setMath(m);
Nstb.setChinese(c);
list.add(Nstb);
}
}




Iterator endlist=list.iterator();
while(endlist.hasNext())
{
Student st=(Student)endlist.next();
System.out.println(st.getName()+":"+st.getMath()+":"+st.getChinese());
}
}
}
//Student.java

public class Student {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

}
private String name;
private String hometown;
private int chinese;
private int math;

public String getHometown() {
return hometown;
}
public void setHometown(String hometown) {
this.hometown = hometown;
}
public int getChinese() {
return chinese;
}
public void setChinese(int chinese) {
this.chinese = chinese;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}


...全文

相关推荐

C++实现智能指针

C、C++没有自动内存回收机制,程序员需要手动释放,如果忘记则会导致内存泄露,另外普通指针存在悬垂指针的问题。 何为悬垂指针? 当有多个指针指向同一个对象时,如果某个指针delete了该对象,对这个指针来说它是明确了它所指的对象被释放了,所以它不会再对此对象进行操作,但是对于剩下的其他指针来说呢?它们还傻傻地指向已经被删除的对象,并随时准备对它进行操作,于是悬垂指针就形成了。 代码很简单,我们...

源代码大师

【C++】智能指针之引用计数的实现

本文将简单的介绍,C++11中的智能指针的引用计数大致是如何实现的。部分内容节选自 C++ primer 5th。

小do在努力

C++智能指针的底层是如何实现的

C++智能指针作为现代C++内存安全的核心机制,通过RAII思想实现了内存的自动化管理。本文深入剖析了智能指针的底层实现原理,重点探讨了shared_ptr的引用计数机制、weak_ptr解决循环引用的方案,以及unique_ptr的独占所有权特性。研究表明,智能指针将手动内存管理的复杂性转化为对象生命周期的自动化管理,有效降低了70%以上的内存相关缺陷。在实际工程中,合理选择智能指针类型(如优先使用unique_ptr、适时采用weak_ptr打破循环引用)并结合性能优化策略,可显著提升系统稳定性与安全性

塞北山巅

【雷达信号处理】数字下变频(DDC)(Matlab代码实现)

内容概要:本文介绍了基于MATLAB的雷达信号处理中数字下变频(DDC)技术的实现方法,重点阐述了DDC在雷达接收机前端信号处理中的关键作用。通过将高频回波信号下变频至基带,便于后续进行数字化处理与目标信息提取。文中提供了完整的MATLAB代码实现,涵盖混频、低通滤波、抽取等核心步骤,帮助读者理解DDC的工作原理与工程实现细节。; 适合人群:具备一定信号与系统、数字信号处理基础知识,从事雷达、通信或电子工程相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于教学演示,加深对数字下变频原理的理解;②作为雷达或通信系统仿真项目的基础模块;③辅助科研人员快速搭建信号处理链路,进行算法验证与性能分析。; 阅读建议:建议结合数字信号处理教材中的混频、奈奎斯特采样及多速率信号处理理论进行学习,动手运行并调试代码,尝试调整参数(如本振频率、滤波器阶数、抽取因子)以观察对输出信号的影响,从而深入掌握DDC的设计要点与实际应用。

小念念_

福建省福州新区矢量面数据-02坐标-geojson格式.json

福州新区区划面数据,geojson格式,02坐标

samLi0620
评论 2
收藏 已收藏
分享
返回顶部
cengxiong
Java EE 67,535 成员 225,843 内容