使用map对不同种类的数据进行分类

本文介绍如何使用Map对输入的List按symble值进行动态分类,最终返回List>。关键在于利用哈希映射存储symble值及其对应的子列表索引,实现高效分类。
摘要由CSDN通过智能技术生成

概述

对于一批数据,其输入方式为List<Entity>,假设现需要根据不同的symble值(假设不同symble值的种类未知),将List<Entity>进行分类,然后以List<List<Entity>>的形式进行返回。

public class Entity{
    private String symble;
    private T data;
}

思路如下:

public List<List<Entity>> group(List<Entity> entities){
    Map<String,Integer> map = new HashMap<>();
    int symbleNum = 0; //symbleNum记录List<Entity>中symble的种类
    
    //下方for循环执行完毕后map中存储<Entity,Integer>,Integer对应到之后List<List<Entity>>的下标索引,通过下标索引取出Entity实现分类
    for(int i=0; i<entities.size(); i++){
        String symble = entities.get(i).getSymble();
		if(!map.containsKey(symble)){
            map.put(symble,symbleNum++);
        }
    }
    
    List<List<Entity>> listListEntity = new ArrayList<>();
    //下方的for循环很关键,因为上方的List<List<Entity>> listListSub = new ArrayList<>();只是新建了最外侧的集合,而每一个集合元素为null,下方的for循环就是填充每一个集合元素,新建每一个集合元素
    for(int i=0; i<symbleNum; i++) {
        listListEntity.add(new ArrayList<>());
    }
    
    //下方for循环实现分类
    for(int i=0; i<symbleNum; i++){
        for (int j = 0; j < entities.size(); j++) {
            String symble = entities.get(i).getSymble();
            
            //通过map获取到对应于List<List<Entity>>中的位置索引,从而实现分类
            Integer index = map.get(symble);
            //将Entity类填入其所属位置
            listListEntity.get(index).add(entities.get(i));
        }
    }
    return listListSub;
}

值得学习的思路以及注意点:

1.通过map实现分类,其可实现将种类不确定,个数不确定的数据进行分类

2.新建List<List<Entity>> listListEntity = new ArrayList<>();后,并不能通过listListEntity.get(i)获取对应下标的元素,因为listListEntity.get(i)仍为List<Entity>,而它们并未被新建出来,所以需要先新建出来才可获取到!即通过for循环为每一个位置添加一个List<Entity>,如:

for(int i=0; i<symbleNum; i++) {
    listListEntity.add(new ArrayList<>());
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值