Java 如何在ArrayList对象上使用求和函数
我有一个对象列表(Java 如何在ArrayList对象上使用求和函数,java,list,object,sum,Java,List,Object,Sum,我有一个对象列表(ObjectX),我想对列表中具有相同id(idX)的每个元素从该对象中出现的特定字段(fieldX)求和 folderList示例: idX fieldX fieldYY ObjectX1 : 1 50 a ObjectX2 : 1 null a ObjectX3 : 1 30 a ObjectX4 :
ObjectX
),我想对列表中具有相同id(idX
)的每个元素从该对象中出现的特定字段(fieldX
)求和
folderList示例:
idX fieldX fieldYY
ObjectX1 : 1 50 a
ObjectX2 : 1 null a
ObjectX3 : 1 30 a
ObjectX4 : 2 99 b
我想得到:
idX fieldX fieldYY
ObjectX1 : 1 80 a
ObjectX2 : 2 99 b
我首先对列表进行排序,以使用相同的idX
重新组合对象:
(我正在使用Java1.6)
Collections.sort(folderList,newcomparator()
{
公共整数比较(最终ObjectX对象,最终ObjectX对象)
{
整数orderFirst=objOne.getOrders();
整数ordersond=objTwo.getOrders();
整数dareOne=新整数(0);
整数dareTwo=新整数(0);
int sComp=orderFirst.compareTo(orderSecond);
如果(sComp!=0){
返回sComp;
}
否则{
dareOne=objOne.getFolderNum();
dareTwo=objTwo.getFolderNum();
返回dareOne.compareTo(dareTwo);
}
}
});
但我不知道如何同时对
fieldX
值求和,并通过fieldX
(如SQL中的sum()函数)高效地只得到一行
Map<Integer,List<ObjectX>> map = folderList.stream().collect(Collectors.groupingBy(Folder::getId));
Map Map=folderList.stream().collect(Collectors.groupingBy(Folder::getId));
这里的key是id,value是具有相同id的对象列表如果您为任务选择了正确的数据结构,那么操作非常简单 例如,您有
Map
ObjectXDescription
应封装idX、fieldX、fieldY
接下来,您可以编写一个简单的循环,它将遍历所有实体,并对
fieldX
与fieldYY
发生了什么?或者如果idX
是相同的,那么fieldY
也是相同的吗?你可能需要一个Map
,其中idX
作为键。fieldYY对于给定idX的所有事件都是相同的。Hi说他使用了java6。您的解决方案将不起作用。我希望避免使用地图,因为每次都需要返回一个列表。将列表转换为映射,然后再转换为列表,成本不会很高吗?每次转换都是O(n),这将大大简化您的代码。排序需要O(n logn),而您仍然没有考虑求和。(不要担心事情需要多长时间,直到你确定它需要很长的时间。)@ZagorulkinDmitry这是一个正确的想法,但是ObjectX
封装了这些字段。所以你的地图真的是一套。我想你真的想要一张地图
,上面有idX
作为键。
Map<Integer,List<ObjectX>> map = folderList.stream().collect(Collectors.groupingBy(Folder::getId));