2024年多线程处理大数据问题,多线程高并发

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

@Slf4j

public class SortResource {

private String tableName;

private JdbcTemplate jdbcTemplate;

public SortResource(String tableName,JdbcTemplate jdbcTemplate){

this.tableName=tableName;

this.jdbcTemplate=jdbcTemplate;

}

public void process(Map<String, Object> map,List<Map<String, Object>> gridList){

log.info(“入库表:”+tableName);

double x=Double.parseDouble(map.get(“经度”).toString());

double y=Double.parseDouble(map.get(“纬度”).toString());

for(Map<String, Object> gridMap:gridList){

String gridId=gridMap.get(“ID”).toString();

List<List> lists=lonLatInfoHandle(gridMap.get(“经纬度信息”).toString());

//log.info(“网格ID”+gridId);

if(check(lists,x,y)){

insert(map,gridId);

break;

}

}

}

/**

  • 判断点是否在区域内

  • @param lists

  • @param x

  • @param y

  • @return

*/

public boolean check(List<List> lists,double x,double y){

if(lists.isEmpty()){

return false;

}

// 多多边型,有一个为true 就可以

for(List list:lists){

if(checkHbracketsComma(list,x,y)){

return true;

}

}

return false;

}

/**

  • 检测镂空的

  • @param list

  • @return

*/

public boolean checkHbracketsComma(List list,double x,double y){

RegionExtern regExt = new RegionExtern(list.get(0));

boolean flag=regExt.checkPointInRegion(x,y);

if(list.size()>1 && flag){

for(int i=1;i<list.size();i++){

RegionExtern regExtTemp = new RegionExtern(list.get(i));

if(regExt.checkPointInRegion(x,y)){

//如果存在镂空的区域内,则返回false;

flag=false;

}

}

}

return flag;

}

/**

  • 经纬度信息范围处理

  • @param lonLatInfo

*/

public static List<List> lonLatInfoHandle(String lonLatInfo){

List<List> lists=new ArrayList<>();

if(lonLatInfo==null || lonLatInfo.isEmpty()){

return lists;

}

//多多边型

if(lonLatInfo.contains(ConstantPool.SEPARATORRIGHTRIGHTBRACKETSCOMMA)){

String[] arr=lonLatInfo.split(“\)\),”);

for(int i=0;i<arr.length;i++){

lists.add(rightHbracketsComma(arr[i]));

}

}else{

List list=rightHbracketsComma(lonLatInfo);

lists.add(list);

}

return lists;

}

/**

  • 镂空或者多边形

  • @param lonLatInfo

  • @return

*/

public static List rightHbracketsComma(String lonLatInfo){

List list=new ArrayList<>();

if(lonLatInfo.contains(ConstantPool.SEPARATORRIGHTBRACKETSCOMMA)){

String[] arr=lonLatInfo.split(“\),”);

for(int i=0;i<arr.length;i++){

String temp=arr[i].replace(ConstantPool.MULTIPOLYGON,ConstantPool.SEPARATORNULL).replace(ConstantPool.POLYGON,ConstantPool.SEPARATORNULL).trim();

arr[i]=temp.replace(ConstantPool.SEPARATORLEFTBRACKETS,ConstantPool.SEPARATORNULL).replace(ConstantPool.SEPARATORRIGHTBRACKETS,ConstantPool.SEPARATORNULL).replace(ConstantPool.SEPARATORCOMMA,ConstantPool.SEPARATORBranch).replace(ConstantPool.SEPARATORSPACE,ConstantPool.SEPARATORCOMMA);

}

list= Arrays.asList(arr);

}else {

String temp=lonLatInfo.replace(ConstantPool.MULTIPOLYGON,ConstantPool.SEPARATORNULL).replace(ConstantPool.POLYGON,ConstantPool.SEPARATORNULL).trim();

list.add(temp.replace(ConstantPool.SEPARATORLEFTBRACKETS,ConstantPool.SEPARATORNULL).replace(ConstantPool.SEPARATORRIGHTBRACKETS,ConstantPool.SEPARATORNULL).replace(ConstantPool.SEPARATORCOMMA,ConstantPool.SEPARATORBranch).replace(ConstantPool.SEPARATORSPACE,ConstantPool.SEPARATORCOMMA));

}

return list;

}

/**

  • 入库

  • @param map

  • @param gridId

*/

public void insert(Map<String, Object> map,String gridId){

String sql=String.format(“insert [%s] select %s,%s,‘%s’,‘%s’”,tableName,map.get(“流水号”).toString(),gridId,map.get(“名称”).toString(),map.get(“详细地址”).toString());

log.info(sql);

jdbcTemplate.execute(sql);

}

将一个list均分成n个list

===============================================================================

/**

  • 将一个list均分成n个list,主要通过偏移量来实现的

  • @param source

  • @return

*/

public static List<List> averageAssign(List source,int n){

List<List> result=new ArrayList<List>();

int remaider=source.size()%n; //(先计算出余数)

int number=source.size()/n; //然后是商

int offset=0;//偏移量

for(int i=0;i<n;i++){

List value=null;

if(remaider>0){

value=source.subList(i*number+offset, (i+1)*number+offset+1);

remaider–;

offset++;

}else{

value=source.subList(i*number+offset, (i+1)*number+offset);

}

result.add(value);

}
return result;
}

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

存中…(img-YTlBX0ze-1715582972900)]
[外链图片转存中…(img-aJC5FnIj-1715582972901)]
[外链图片转存中…(img-w2hfh3GJ-1715582972901)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值