arraylist Java中“分组依据”和聚合值的最佳数据结构?
我创建了一个数组类型的ArrayList,如下所示
ArrayList<Object[]> csvArray = new ArrayList<Object[]>();
如您所见,ArrayList的每个元素都是类似于{Country,City,Name,Age}的数组
现在我想在国家和城市上做一个“分组,然后计算每个国家+城市的平均年龄
请问最简单的方法是什么?或者你们有没有建议在这种“分组依据”和聚合需求中使用比ArrayList更好的数据结构
非常感谢你的回答
# 1 楼答案
您可以使用Java8流来实现这个和^{} 。例如:
# 2 楼答案
在java 8中,通过使用收集器,可以简化基于一个或多个属性的值对集合中的对象进行分组的想法
首先,我建议您添加一个新类,如下所示
设置
infos
按国家+城市分组:
输出
每个国家和城市的人口平均年龄:
输出:
# 3 楼答案
我建议采取额外的措施。从对象[]中的CSV收集数据。如果将数据封装到包含这些数据的类中,java8集合将很容易帮助您。(也没有,但更易读易懂)
下面是一个例子——它引入了一个类
Information
,其中包含给定的数据(国家、城市、姓名、年龄)。该类有一个构造函数,通过给定的Object[]
数组初始化这些字段,这可能有助于您这样做,但是:这些字段必须是固定的(通常用于CSV):main显示了问题的简单输出
# 4 楼答案
您将在Java 8中获得许多选项
示例
如果您可以使用Java8,并且没有使用数据结构的具体原因,那么可以阅读下面的教程
http://java.dzone.com/articles/java-8-group-collections
# 5 楼答案
你可以使用magicwerk的布朗尼收藏图书馆。组织(http://www.magicwerk.org/page-collections-overview.html)
他们提供符合您需求的密钥列表。(http://www.magicwerk.org/page-collections-examples.html)
# 6 楼答案
您可以查看@duffy356推荐的收藏。我可以给你一个与^{相关的标准解决方案
我会使用一个公共的
Map<Key,Value>
和一个特定的HashMap
正如我所看到的,对于钥匙,你需要一个和国家和城市有关的非常简单的物体。重点是创建一个有效的
equals(Object) : boolean
方法。我会使用Eclipse自动生成器;对我来说,它给了我以下信息:}
现在我们可以在
HashMap<CountryCityKey, MySuperObject>
中对一个或多个对象进行分组其代码可能是:
你有:)