java中列表对象循环内的按组求和
我一直被困在从列表对象创建小计的过程中。代码是这样的java中列表对象循环内的按组求和,java,list,object,for-loop,Java,List,Object,For Loop,我一直被困在从列表对象创建小计的过程中。代码是这样的 private List<Object> getData() { List<Object> items = new ArrayList<>(); List<Object> objectList = dataBaseHelper.fetchData(); for (Object obj : objectList) { items.add(new Object(obj.o
private List<Object> getData() {
List<Object> items = new ArrayList<>();
List<Object> objectList = dataBaseHelper.fetchData();
for (Object obj : objectList) {
items.add(new Object(obj.one, obj.two));
}
return items;
}
但我想把我的清单列成这样
a 1
a 2
a 3
subTotal a 6
b 1
b 2
b 3
subTotal b 6
有人能指导我如何做到这一点吗
谢谢你,好吧,我试着用一种有点抽象的方式来回答 首先,为了减少歧义,我们假设
dataBaseHelper.fetchData()
返回一个List
,其中MyObject
包含以下成员:
公共字符串名称代码>
public-int-price代码>
Map subTotalsByName=newhashmap()代码>
然后我们可以循环返回的数据:
private Map<String, List<MyObject>> getData() {
Map<String, List<MyObject>> subTotalsByName = new HashMap<>();
List<MyObject> objectList = dataBaseHelper.fetchData();
for (MyObject obj : objectList) {
List<MyObject> subTotalList = subTotalsByName.get(obj.name);
if (subTotalList == null){
subTotalList = new ArrayList<>();
subTotalsByName.put(obj.name, subTotalList);
}
subTotalList.add(obj);
}
return subTotalsByName;
}
(同样,这是未经测试的,视为伪代码)
然后得到如下输出:
a 1
a 2
a 3
subTotal for a is 6
b 4
b 5
b 6
subTotal for b is 15
Object
的类实际上是什么?@kazenorin它只是一个例子,比如Car或etc,我给出了一个关于我的问题的简单例子,你能给我一个实现我想要的东西的提示吗?我一直在测试它,但我在这行代码subTotalsByName.put(subTotalList)中得到了这个错误代码>在我的代码中,错误是:映射中的put(java.lang.String,List)不能应用于(java.util.List),它应该是subTotalsByName.put(obj.name,subTotalList)代码>,如Map.put(key,value)
需要两个参数。如果代码正常工作,它会给我想要的结果。问题是,我不想更改其他代码,因为如果我将函数类型从List更改为Map,我需要更改其他代码。这相当令人费解,因此,如果函数的类型返回仍然是List,那么可以进行任何更改吗?是否?您的意思是根本不想更改private List getData
的返回类型?如果是这样的话,这是不可能的,或者在使用普通Java实践时是不可能的。至少,您必须更改List的泛型类型,例如private List getData
,其中MyObjectSubtotal是保存小计的对象。否则,如何区分汇总(小计)和记录(对象)?
for (Entry<String, List<MyObject>> entry : subTotalsByName.entrySet()) {
int subtotal = 0;
List<MyObject> myObjects = entry.getValue();
for (MyObject myObj : myObjects){
System.out.println(myObj.name + " " + myObj.price);
subtotal += myObj.price;
}
System.out.println("subTotal for " + entry.getKey() + " is " + subtotal);
System.out.println();
}
a 1
a 2
a 3
subTotal for a is 6
b 4
b 5
b 6
subTotal for b is 15