java分组问题

时间:2012-04-25 08:31:23

标签: java grouping

我有一个资产类型的集合体,其中资产是一个POJO,并且有set和get方法。

ArrayList<Asset> assetItems;

每个资产都有ratingValue和 它可以通过

获取
assetItems.get(i).getratingValue();

现在任务是assetItems应根据其评级值进行分组。有人可以帮助我吗

例如 最初,如果arraylist中的项目的评级值是 一个 C G 一个 Ĵ ç

那么输出应该是 一个 一个 C C G Ĵ

4 个答案:

答案 0 :(得分:3)

听起来像Multimap Guava就是你想要的:

Multimap<String, Asset> map = Multimaps.newListMultimap();
for (Asset asset : assetItems) {
    map.put(asset.getRatingValue(), asset);
}

然后您可以获得具有特定评级的所有资产:

for (Asset asset : map.get(someRating)) {
    ...
}

答案 1 :(得分:1)

你应该尝试类似的东西:

Map<Integer, List<Asset>> groupedAssets = new HashMap<Integer,  List<Asset>>()
for(Asset asset : assetItems) {
    int ratingValue = asset.getratingValue();
    List<Asset> assets = groupedAssets.get(ratingValue);
    if(assets == null) { // this rating value has never been retrieved before
        assets = new ArrayList<Asset>();
        groupedAssets.put(ratingValue, assets);
    }
    assets.add(asset);
}

生成的Map包含按Asset

分组的ratingValue列表

答案 2 :(得分:0)

您可以根据阈值对此类资产进行分组。

    Class AssetGroup
    {
    int thresholdrating;
    ArrayList<Asset> listAssets;

   // add Asset to group list

   public void add(Asset a)
   {
    this.listAssets = a;
   }

    }

答案 3 :(得分:0)

如果您的意思是分组,那么请看看Jon Skeet解决方案。 如果您的意思是排序,那么您可以使用以下代码:

Collections.sort(assetItems, new Comparator<Asset>() {
    public int compare(Asset a1, Asset a2) {
        return a1.getratingValue().compareTo(a2.getratingValue());
    }
};