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