模拟人员聚集报警

//模拟场景人员聚集
//范围5米 人员聚集数6个以及6个以上报警

设备信息类

package com.example.demo.udp;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
/*** 模拟设备*/
public class Device {/*** 设备id*/private Integer deviceId;/*** 距离*/private Integer distance;
}

集合元素数排序工具

package com.example.demo.udp;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
/*** 根据集合元素个数排序的工具*/
public class SortUti {private List<Integer> sort;
}

算法实现

package com.example.demo.udp;import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.compress.utils.Sets;
import org.apache.commons.lang3.StringUtils;import java.util.*;
import java.util.stream.Collectors;public final class DeviceTest {public static void main(String[] args) throws Exception {//模拟场景人员聚集//范围5米 人员聚集数6个以及6个以上报警List<Device> deviceList = Lists.newArrayList();Device d1 = Device.builder().deviceId(1).distance(1).build();Device d2 = Device.builder().deviceId(2).distance(2).build();Device d3 = Device.builder().deviceId(3).distance(3).build();Device d4 = Device.builder().deviceId(4).distance(4).build();Device d5 = Device.builder().deviceId(5).distance(5).build();Device d6 = Device.builder().deviceId(6).distance(6).build();Device d7 = Device.builder().deviceId(7).distance(7).build();Device d8 = Device.builder().deviceId(8).distance(8).build();Device d9 = Device.builder().deviceId(9).distance(9).build();Device d10 = Device.builder().deviceId(10).distance(10).build();Device d11 = Device.builder().deviceId(11).distance(11).build();Device d12 = Device.builder().deviceId(12).distance(12).build();Device d13 = Device.builder().deviceId(13).distance(13).build();deviceList.add(d5);deviceList.add(d7);deviceList.add(d6);deviceList.add(d3);deviceList.add(d2);deviceList.add(d4);deviceList.add(d11);deviceList.add(d1);deviceList.add(d9);deviceList.add(d8);deviceList.add(d10);deviceList.add(d12);deviceList.add(d13);Map<Integer, String> map = Maps.newConcurrentMap();Set<String> sets = Sets.newHashSet();List<SortUti> sortUtis = Lists.newArrayList();deviceList.forEach(k -> {//范围 距离小于5List<Device> list = deviceList.stream().filter(i -> Math.abs(k.getDistance() - i.getDistance()) < 5).collect(Collectors.toList());//人数 大于 5if (list.size() > 5) {List<Integer> deviceIds = list.stream().map(i -> i.getDeviceId()).collect(Collectors.toList());deviceIds.sort(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;}});SortUti ss = SortUti.builder().sort(deviceIds).build();sortUtis.add(ss);map.put(k.getDeviceId(), StringUtils.join(deviceIds, ","));}});sortUtis.sort(new Comparator<SortUti>() {@Overridepublic int compare(SortUti o1, SortUti o2) {return o2.getSort().size() - o1.getSort().size();}});sortUtis.forEach(k -> {System.out.println(StringUtils.join(k.getSort(), ","));});System.out.println("--------------------------------");for (SortUti ss : sortUtis) {String dd = StringUtils.join(ss.getSort(), ",");boolean flag = true;A:for (String str : sets) {if (str.contains(dd)) {flag = false;break A;}}if (flag) {sets.add(dd);}}//生成聚集事件 以及聚集人员的信息 设备id//sets为生成的结果sets.forEach(k -> {System.out.println(k);});}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis基础篇-004 Redis的Java客户端

Redis客户端分为三类&#xff1a; 命令行客户端图形化桌面客户端编程客户端&#xff08;java客户端&#xff09; redis可视化工具和客户端 1、 Jedis快速入门 Jedis的官网地址&#xff1a; https://github.com/redis/jedis 1.1 新建一个Maven工程并引入以下依赖 <!--引入…

【C语言进阶篇】你真的了解预处理吗? 预处理详细解析

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 一、预定义符号的含义二、#define2.1 #define定义标识符2.2 在define定义标识符的注意事项 三、#define 定义宏&…

轻松搭建知识付费小程序:让知识传播更便捷

明理信息科技saas知识付费平台 在当今数字化时代&#xff0c;知识付费已经成为一种趋势&#xff0c;越来越多的人愿意为有价值的知识付费。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。同时&#xff0c;开发和维护…

java SSM家庭财务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM家庭财务管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

百川大模型AI对话实战——Python开发一个对话机器人

百川大模型开放提供API体验中心&#xff0c;体验不错&#xff0c;有小伙伴也对搭建自己的对话机器人比较兴趣&#xff0c;今天通过Python来简单介绍下&#xff0c;如何调用百川大模型的API来构建自己的小产品。 在开发环境中安装Python&#xff0c;如何安装&#xff1f;参照网…

Vue:defineAsyncComponent(异步组件)、component(动态组件)、keep-alive(缓存组件)

异步组件&#xff1a;defineAsyncComponent Vue3 的 defineAsyncComponent 特性可以让我们延迟加载组件。因为在默认情况下&#xff0c;在构建项目或运行项目时&#xff0c;会将所有所需要的打包成一个整体&#xff0c;vue为单页面应用&#xff0c;同步加载大量的页面代码会导…

AI“百模大战”现状:向垂直、B端谋场景,算力仍是主要制约因素

文章目录 每日一句正能量前言AI&#xff08;人工智能&#xff09;大模型正“飞入”百姓家和行业中。向垂直、B端谋场景算力仍是主要制约因素构建“数据-模型-应用”飞轮后记 每日一句正能量 我们必须在失败中寻找胜利&#xff0c;在绝望中寻求希望。 前言 在当前快速发展的人工…

SecureCRT连接vmware虚拟机的centos系统配置

软件版本&#xff1a;VMware10.0.3&#xff0c;centos 7&#xff0c;securecrt 8.7.2 1&#xff0c;虚拟网络编辑器选择桥接模式&#xff0c; 2&#xff0c;如果不小心删除网络&#xff0c;centos关机状态下&#xff0c;选择恢复默认设置。 3&#xff0c;进入linux系统&#…

革命性突破:Great River推出XL高速ARINC 818传感器测试卡

Great River Technology荣幸地宣布&#xff0c;与RVS&#xff08;远程视觉系统&#xff09;2.0平台合作推出的XL高速ARINC 818传感器测试卡正式亮相。这款开创性的测试卡在柯林斯航空电子公司&#xff08;RTX业务部&#xff09;和波音公司开发和测试RVS 2.0系统中发挥了重要作用…

牛客小白月赛84——k级序列(超级无敌详解)(贪心)

前言&#xff1a; 这b题费了我一身牛劲&#xff0c;结果还是没有做出来&#xff0c;晚上请教大佬后&#xff0c;知晓方法&#xff0c;才将其ac&#xff0c;于是决心务必再次使用传说中的费曼学习法&#xff0c;并与大家分享一下这道题目。 题目&#xff1a; 登录—专业IT笔试…

09.list 容器

9、list 容器 功能&#xff1a; 将数据进行链式存储 链表&#xff08;list&#xff09;是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成&#xff1a; 链表由一系列结点组成 结点的组成&#xff1a; 一个是存…

Zabbix6 使用Agent2实现证书监控的详细步骤

目标 我们的目标是通过获取网站的证书信息来实现网站证书监控。 使用agent2的key 只需使用其中的key&#xff0c;就能实现我们的目标功能。然而&#xff0c;由于它返回的是json格式的数据&#xff0c;我们需要根据数据来配置监控项目&#xff08;item&#xff09;和触发器&am…

Pandas教程

参考文献&#xff0c;记录一下 pandas 教程 - 盖若

六西格玛的科技漩涡——张驰咨询如何促成企业变革

在管理的海洋里&#xff0c;六西格玛管理是一艘稳健的航船&#xff0c;在质量管理的汪洋中乘风破浪&#xff0c;尽管质疑之声像远处的风暴不断逼近&#xff0c;但张驰咨询公司依靠这艘航船坚持初心&#xff0c;驭风而行。 20载耕耘&#xff0c;张驰咨询不仅仅是培养了超过8000…

IP地址子网划分案例

网络工程师基本功&#xff0c;每人必会的IP地址划分案例。 要求&#xff1a; 一段C类地址192.168.1.0/24&#xff0c;请你将地址分给网络中的主机&#xff0c;要求至少有5个子网&#xff0c;每个子网至少有20台主机。 步骤&#xff1a; 1、要求5个子网&#xff0c;要向主机…

Jenkins自动化部署-配置ssh代码拉去方式的密钥(公私钥)

Jenkins想要通过ssh方式拉去gitlab代码&#xff0c;则需要在在Jenkins服务器配置私钥&#xff0c;gitlab服务器配置公钥 使用root用户生成公钥和私钥 ssh-keygen -t rsa在/root/.ssh/目录保存了公钥和使用 id_rsa&#xff1a;私钥文件 id_rsa.pub&#xff1a;公钥文件 把生…

SpringBoot中常见配置配置,MySQL、Redis、MinIO等

SpringBoot中配置 启动端口号 server:port: 8501 spring:application:name: server-managerprofiles:active: dev # 当前使用的配置文件servlet:multipart:max-file-size: 20MB # 最大文件max-request-size: 20MB# # 最大请求数据库相关 MySQL spring:datasource:type: com…

BDD - Python Behave VS Code 插件 Behave VSC

BDD - Python Behave VS Code 插件 Behave VSC 引言Behave VSC 插件Behave VSC 安装Behave VSC 注意事项Behave VSC 插件默认可识别的项目结构Behave VSC 设置识别非 features 文件名的项目 引言 上一篇《BDD - Python Behave 入门》介绍了 Behave 的入门基础知识&#xff0c;…

IP应用场景的规划

IP地址作为互联网通信的基石&#xff0c;在现代社会中扮演着至关重要的角色。本文将深入探讨IP地址在不同应用场景中的规划与拓展&#xff0c;探讨其在网络通信、安全、商业、医疗和智能城市等领域的关键作用与未来发展趋势。 IP地址的基本原理 IP地址是分配给网络上设备的数…

python画图【00】Anaconda和Pycharm和jupyter的使用

①Anaconda ②Pycharm 一、Anaconda安装步骤 1、双击安装包&#xff0c;点击next。 2、点我同意I agree 3、 4、选择需要安装的位置&#xff0c;位置可根据自己情况安装到具体位置&#xff0c;但要记住安装到了哪里。然后点击next 5、可选择加入到环境变量&#xff0c;…