Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在ArrayList对象上使用求和函数_Java_List_Object_Sum - Fatal编程技术网

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));