`

Java对List多个排序、查询条件的处理

    博客分类:
  • Java
 
阅读更多

 

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.ComparisonChain;

/**
 * Filter and Sort <code>List</code> by multiple conditions.<br>
 * It's like SQL 'Where' and 'Order by' clause. Input multiple <code>Comparator</code>
 * 
 * @author zheng.wen   http://www.oschina.net/question/12_21127
 * @param <T>
 */
public class GroupFilterSortUtils<T> implements Comparator<T> {
	
	/**排序方式**/
	interface Sort {
		public static final String DESC = "DESC";
		public static final String ASC = "ASC";
		
		/**数组下标0,排序条件名称**/
		public static final int NAME = 0;
		/**数组下标1,排序方式**/
		public static final int TYPE = 1;
	}
	
	/**过滤条件**/
	interface Filter {
		/**过滤模式**/
		public static final String LIKE = "0";
		public static final String START_WITH = "1";
		public static final String EQUAL = "2";
		public static final String LESS_THAN = "3";
		public static final String MORE_THAN = "4";
		
		/**大小写**/
		public static final String DIFF_CASE_TRUE = "TRUE";
		public static final String DIFF_CASE_FALSE = "FALSE";
		
		/**数组下标0,过滤条件名称**/
		public static final int NAME = 0;
		/**数组下标1,过滤条件值**/
		public static final int VALUE = 1;
		/**数组下标2,过滤模式**/
		public static final int MODE = 2;
		/**是否区分大小写**/
		public static final int IS_DIFF_CASE = 3;
	}
	
	public GroupFilterSortUtils() { }
	
	/**存储比较器: 此处不能使用static**/
	private List<Comparator<Object>> comparators = new ArrayList<Comparator<Object>>();
	
	public int compare(T t1, T t2) {
		if (t1 == null || t2 == null) return 0;
		for (Comparator<Object> comparator : comparators) {
			int returnValue = comparator.compare(t1, t2);
			if (returnValue != 0) return returnValue;
		}
		return 0;
	}
	
	public static <T> List<T> filterList(final List<T> list, final String[] ... filterChain) {
		if (list == null || list.size() <= 0 || filterChain == null || filterChain.length <=0) return list;
		if (list.contains(null)) list.remove(null);
		List<T> tempList = new ArrayList<T>();
		boolean flag;
		for (T t : list) {
			if (t == null) continue;
			flag = true;
			for (String[] filter : filterChain) {
				if (!flag) break;
				flag = false;
				
				String filterName = filter[Filter.NAME];
				String filterValue = filter[Filter.VALUE];
				String filterMode = filter[Filter.MODE];
				String isDiffUpperLowerCase = filter[Filter.IS_DIFF_CASE];
				boolean isDiffCase = Boolean.parseBoolean(isDiffUpperLowerCase);
				try {
					String methodName = "get" + firstLetterToUpper(filterName);
					Method method = t.getClass().getDeclaredMethod(methodName, null);
					Object o = method.invoke(t, null);
					String realValue = o != null ? o.toString() : "";
					
					String filterValue2 = isDiffCase ? filterValue : filterValue.toLowerCase();
					String realValue2 = isDiffCase ? realValue : realValue.toLowerCase();
					
					if ((Filter.START_WITH.equals(filterMode) && realValue2.startsWith(filterValue2)) ||
							(Filter.LIKE.equals(filterMode) && realValue2.indexOf(filterValue2) != -1) ||
							(Filter.EQUAL.equals(filterMode) && realValue2.equals(filterValue2)) ||
							(Filter.MORE_THAN.equals(filterMode) && Double.parseDouble(realValue2) > Double.parseDouble(filterValue2)) ||
							(Filter.LESS_THAN.equals(filterMode) && Double.parseDouble(realValue2) < Double.parseDouble(filterValue2))) flag = true;
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			if (flag) tempList.add(t);
		}
		return tempList;
	}
	
	public <T> List<T> sortList(final List<T> list, final String[]... sortChain) {
		if (list == null || list.size() <= 0 || sortChain == null || sortChain.length <=0) return list;
		if (list.contains(null)) list.remove(null);
		this.setComparator(sortChain);
		List<T> tempList = new ArrayList<T>();
		tempList.addAll(list);
		Collections.sort(tempList, (GroupFilterSortUtils<T>) this);
		return tempList;
	}
	
	public <T> List<T> filterSortList(final List<T> list, final String[][] filterChain, final String[][] sortChain) {
		if (list == null || list.size() <= 0 || filterChain == null || filterChain.length <= 0 || sortChain == null || sortChain.length <=0) return list;
		if (list.contains(null)) list.remove(null);
		List<T> tempList = filterList(list, filterChain);
		this.setComparator(sortChain);
		Collections.sort(tempList, (GroupFilterSortUtils<T>) this);
		return tempList;
	}
	
	public static String firstLetterToUpper(String str){
		if (str == null || "".equals(str)) return str;
        char[] array = str.toCharArray();
        array[0] -= 32;
        return String.valueOf(array);
    }
	
	private <T> void setComparator(final String[][] sortCriteria) {
		if (sortCriteria == null || sortCriteria.length <= 0) return;

		for (final String[] criteria : sortCriteria) {
			Comparator<T> sortComparator = new Comparator<T> () {
				public int compare(T t1, T t2) {
					if (t1 == null || t2 == null) return 0;
					int result = 0;
					try {
						String name = criteria[Sort.NAME];
						String type = criteria[Sort.TYPE];
						
						Field field = t1.getClass().getDeclaredField(name);
						Type fieldType = field.getType();

						String methodName = "get" + firstLetterToUpper(name);
						Method method = t1.getClass().getDeclaredMethod(methodName, null);
						
						Object o1 = method.invoke(t1, null);
						Object o2 = method.invoke(t2, null);
						
						if (fieldType == Integer.TYPE || fieldType == Long.TYPE || fieldType == Double.TYPE || fieldType == Float.TYPE || fieldType == Short.TYPE || fieldType == Byte.TYPE) {
							result = type.equals(GroupComparator.DESC) ? (Integer) o2 - (Integer) o1 : (Integer) o1 - (Integer) o2;
						} else if (fieldType == String.class || fieldType == Character.class) {
							String str1 = o1 == null ? "" : o1.toString();
							String str2 = o2 == null ? "" : o2.toString();
							
							result = type.equals(GroupFilterSortUtils.Sort.DESC) ? str2.compareTo(str1) : str1.compareTo(str2);
						}
					} catch (Exception e) {
						e.printStackTrace();
					}
					return result;
				}
			};
			comparators.add((Comparator<Object>) sortComparator);
		}	
	}
	
	public static void main(String[] args) {
		List<User> userList = new ArrayList<User>() {
			{
				add(new User(1, "aaa", 10, 5, 4004, 1));
				add(new User(2, "aac", 22, 5, 5300, 1));
				add(new User(3, "aab", 10, 4, 4800, 1));
				add(new User(4, "ccc", 33, 5, 5000, 3));
				add(new User(5, "yyy", 55, 1, 4000, 1));
				add(new User(6, "bbb", 77, 1, 5800, 4));
				add(new User(7, "qqq", 56, 2, 4000, 7));
				add(new User(8, "ece", 18, 3, 5500, 1));
				add(new User(9, "ggg", 30, 4, 7050, 3));
				add(new User(10, "vcv", 9, 2, 4560, 1));
				add(new User(11, "vcv", 9, 5, 8560, 1));
			}
		};
		
		for(int i = 0; i < 1000000; i++) {
			userList.add(new User(i+12, "kkk" + i, 40, 7, 9000, i));
		}
		
		String[][] filterChain = {
									{User.Filter.NAME, "k", GroupFilterSortUtils.Filter.LIKE, GroupFilterSortUtils.Filter.DIFF_CASE_FALSE}, 
									{User.Filter.SALARY, "00", GroupFilterSortUtils.Filter.LIKE, GroupFilterSortUtils.Filter.DIFF_CASE_FALSE}, 
									{User.Filter.YEAR, "30", GroupFilterSortUtils.Filter.MORE_THAN, GroupFilterSortUtils.Filter.DIFF_CASE_FALSE}
								 };
		
		String[][] sortChain = {
									{ User.Sort.NAME, GroupFilterSortUtils.Sort.ASC },
									{ User.Sort.LEVEL, GroupFilterSortUtils.Sort.DESC },
									{ User.Sort.SALARY, GroupFilterSortUtils.Sort.DESC },
									{ User.Sort.YEAR, GroupFilterSortUtils.Sort.DESC } 
							   };
		
		long start = System.currentTimeMillis();
		
		GroupFilterSortUtils<User> groupFilterSort = new GroupFilterSortUtils<User>();
		List<User> tempList = groupFilterSort.filterList(userList, filterChain);
		
		long start2 = System.currentTimeMillis();
		
		tempList = groupFilterSort.sortList(tempList, sortChain);
		
		long end = System.currentTimeMillis();
		
		System.out.println("1:" + (start2 - start) + " 2:" + (end - start2) + " 3:" + (end - start));
		System.out.println(tempList.size());
//		for (User user : tempList) {
//			System.out.println(user.getName() + " : " + user.getSalary() + " : " + user.getYear());
//		}

	}
}


class User {
	
	private int id;
	private String name;
	private int age;
	private int level;
	private int salary;
	private int year;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getLevel() {
		return level;
	}

	public void setLevel(int level) {
		this.level = level;
	}

	public int getSalary() {
		return salary;
	}

	public void setSalary(int salary) {
		this.salary = salary;
	}

	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public User(int id, String name, int age, int level, int salary, int year) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.level = level;
		this.salary = salary;
		this.year = year;
	}
	
	interface Filter {
		public static final String NAME = "name";
		public static final String LEVEL = "level";
		public static final String SALARY = "salary";
		public static final String YEAR = "year";
	}
	
	interface Sort {
		public static final String NAME = "name";
		public static final String LEVEL = "level";
		public static final String SALARY = "salary";
		public static final String YEAR = "year";
	}
	
	public static void main(String[] args) {
		List<User> userList = new ArrayList<User>() {
			{
				add(new User(1, "aaa", 10, 5, 4004, 1));
				add(new User(2, "aac", 22, 5, 5300, 1));
				add(new User(3, "aab", 10, 4, 4800, 1));
				add(new User(4, "ccc", 33, 5, 5000, 3));
				add(new User(5, "yyy", 55, 1, 4000, 1));
				add(new User(6, "bbb", 77, 1, 5800, 4));
				add(new User(7, "qqq", 56, 2, 4000, 7));
				add(new User(8, "ece", 18, 3, 5500, 1));
				add(new User(9, "ggg", 30, 4, 7050, 3));
				add(new User(10, "vcv", 9, 2, 4560, 1));
				add(new User(11, "vcv", 9, 5, 8560, 1));
			}
		};
		
		for(int i = 0; i < 1000000; i++) {
			userList.add(new User(i+12, "kkk" + i, 40, 7, 9000, i));
		}
		
		long start = System.currentTimeMillis();
		
		Collection<User>  filterCollection = Collections2.filter(userList, new Predicate<User>(){
			public boolean apply(User user) {
				if (user == null) return false;
				String name = user.getName() + "";
				String salary = user.getSalary() + "";
				int year = user.getYear();
				if (name.indexOf("k") != -1 && salary.indexOf("00") != -1 && year > 30) {
					return true;
				}
				return false;
			}
		});
		
		long start2 = System.currentTimeMillis();
				
		User[] userArray = new User[filterCollection.size()];
		List<User> tempList = Arrays.asList(filterCollection.toArray(userArray));

		long start3 = System.currentTimeMillis();
		Collections.sort(tempList, new Comparator<User>(){
			public int compare(User o1, User o2) {
				if (o1 == null || o2 == null) return 0;
				return ComparisonChain.start()  
				       .compare(o1.getName(), o2.getName())  
				       .compare(o1.getLevel(), o2.getLevel()) 
				       .compare(o2.getSalary(), o1.getSalary())
				       .compare(o1.getYear(), o2.getYear()).result(); 
			}
		});
		
		long end = System.currentTimeMillis();
		
		System.out.println("1:" + (start2 - start) + " 2:" + (start3 - start2) + " 3:" + (end - start3) + " all:" + (end - start));
		System.out.println(tempList.size());
		
//		for (User user : tempList) {
//			System.out.println(user.getName() + " : " + user.getSalary() + " : " + user.getYear());
//		}
		
		
	}
}
分享到:
评论

相关推荐

    spring-ai-spring-boot-autoconfigure-1.0.0-M5.jar中文文档.zip

    # 【spring-ai-spring-boot-autoconfigure-***.jar中文文档.zip】 中包含: 中文文档:【spring-ai-spring-boot-autoconfigure-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【spring-ai-spring-boot-autoconfigure-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-spring-boot-autoconfigure-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-spring-boot-autoconfigure-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-spring-boot-autoconfigure-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-spring-boot-autoconfigure-***.jar中文文档.zip,java,spring-ai-spring-boot-autoconfigure-***.jar,org.springframework.ai,spring-ai-spring-boot-autoconfigure,***,org.springframework.ai.autoconfigure.anthropic,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,springframework,spring,ai,boot,autoconfigure,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【spring-ai-spring-boot-autoconfigure-***.jar中文文档.zip】,再解压其中的 【spring-ai-spring-boot-autoconfigure-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-spring-boot-autoconfigure</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'org.springframework.ai', name: 'spring-ai-spring-boot-autoconfigure', version: '***' Gradle (Short): implementation 'org.springframework.ai:spring-ai-spring-boot-autoconfigure:***' Gradle (Kotlin): implementation("org.springframework.ai:spring-ai-spring-boot-autoconfigure:***") ``` # 含有的 Java package(包): ``` org.springframework.ai.autoconfigure.anthropic org.springframework.ai.autoconfigure.azure.openai org.springframework.ai.autoconfigure.bedrock org.springframework.ai.autoconfigure.bedrock.anthropic org.springframework.ai.autoconfigure.bedrock.anthropic3

    50页-道路环卫保洁服务项目管理计划方案.pdf

    在当今智慧城市的建设浪潮中,智慧环卫作为城市管理的重要组成部分,正以其独特的魅力引领着环卫行业的变革。本方案旨在通过一系列高科技手段,如物联网、大数据、云计算等,全面提升环卫作业效率与管理水平,为城市居民创造更加清洁、宜居的生活环境。 一、智慧环卫系统概述与核心亮点 智慧环卫系统是一个集机械化保洁、垃圾清运、设施管理、事件指挥调度等多功能于一体的综合性管理平台。其核心亮点在于通过高精度定位、实时监控与智能分析,实现环卫作业的精细化管理。例如,机械化保洁管理子系统能够实时监控机扫车、洒水车等作业车辆的运行状态,自动规划最优作业路线,并根据作业完成情况生成考核评价报表,极大地提高了作业效率与服务质量。同时,垃圾清运管理子系统则通过安装GPS定位设备和油量传感器,对清运车辆进行全方位监控,确保垃圾清运过程的规范与高效,有效解决了城市垃圾堆积与随意倾倒的问题。此外,系统还配备了垃圾箱满溢报警系统,通过智能感应技术,当垃圾箱内垃圾达到预设高度时自动报警,提醒作业人员及时清运,避免了因垃圾满溢而引发的居民投诉与环境污染。 二、智慧环卫系统的趣味性与知识性融合 智慧环卫系统不仅实用性强,还蕴含着丰富的趣味性与知识性。以餐厨垃圾收运管理子系统为例,该系统通过为餐厨垃圾收运车辆安装GPS定位、车载称重、视频监控等多种感知设备,实现了对餐厨垃圾收运过程的全程监控与智能管理。作业人员可以通过手机APP实时查看车辆位置、行驶轨迹及收运情况,仿佛在玩一场现实版的“垃圾追踪游戏”。同时,系统还能自动生成餐厨垃圾收运统计报表,帮助管理人员轻松掌握收运量、违规情况等关键数据,让数据管理变得既科学又有趣。此外,中转站视频监控子系统更是将趣味性与实用性完美结合,通过高清摄像头与双向语音对讲功能,实现了对中转站内外环境的实时监控与远程指挥,让管理人员足不出户就能掌控全局,仿佛拥有了一双“千里眼”和一对“顺风耳”。 三、智慧环卫系统的未来展望与社会价值 随着科技的不断进步与智慧城市建设的深入推进,智慧环卫系统将迎来更加广阔的发展前景。未来,智慧环卫系统将更加注重数据的深度挖掘与分析,通过大数据与人工智能技术,为城市环卫管理提供更加精准、高效的决策支持。同时,系统还将加强与其他城市管理系统的互联互通,实现资源共享与协同作战,共同推动城市管理的智能化、精细化水平。从社会价值来看,智慧环卫系统的推广与应用将有效提升城市环境卫生质量,改善居民生活环境,提升城市形象与竞争力。此外,系统还能通过优化作业流程、减少资源浪费等方式,为城市可持续发展贡献重要力量。可以说,智慧环卫系统不仅是城市管理的得力助手,更是推动社会进步与文明发展的重要力量。

    微信小程序驾校管理平台约车小程序demo完整源码下载-完整源码.zip

    微信小程序驾校管理平台约车小程序demo完整源码下载_完整源码

    MATLAB实现含风电不确定性的电力系统低碳调度模型

    内容概要:本文详细介绍了使用MATLAB和YALMIP工具包构建的电力系统低碳调度模型。该模型主要解决风电和负荷不确定性带来的挑战,采用模糊机会约束处理风电预测误差,将复杂的非线性约束转化为混合整数线性规划问题。文中展示了如何通过分段线性化、大M法等技巧提高求解效率,并实现了包括火电、水电、风电、储能等多种能源类型的综合调度。此外,还讨论了碳排放成本、启停时间约束、爬坡率约束以及储能系统的建模方法。最终,通过结果可视化展示各成本构成及其对调度策略的影响。 适合人群:从事电力系统优化研究的专业人士,尤其是熟悉MATLAB编程并希望深入了解低碳调度模型的研究人员和技术人员。 使用场景及目标:适用于需要处理风电不确定性、优化电力系统调度的研究项目。目标是降低电力生产成本的同时减少碳排放,确保电力系统的稳定性和经济性。 其他说明:代码中包含了详细的注释和扩展提示,方便进一步修改与应用。对于大规模电力系统调度问题,提供了高效的求解策略和性能优化建议。

    OFDM、OOK、PPM、QAM 的误码率模拟【绘制不同调制方案的误码率曲线】附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    my lib1.SCHLIB

    my lib1.SCHLIB

    工控领域西门子PLC动态加密计时催款程序:设备催款与规范验收的技术实现

    内容概要:本文详细介绍了西门子PLC动态加密计时催款程序的设计与实现。该程序旨在解决工控领域中常见的客户拖延付款问题。通过利用PLC的定时器功能和复杂的加密算法,程序能够在设备运行一段时间后自动触发锁机机制,提醒客户按时验收付款。主要内容包括加密计时的核心思路、代码示例与分析、动态加密的具体实现方法以及柔性锁机的应用技巧。此外,文中还提供了具体的SCL代码片段,展示了如何通过时间校验、动态密钥生成和渐进式降速等方式实现灵活的锁机控制。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是负责PLC编程和设备管理的专业人士。 使用场景及目标:适用于设备调试完成后客户拖延付款或拒绝验收的场景。主要目标是通过技术手段保障供应商的合法权益,促进客户按时履约,减少因款项延迟带来的经济损失。 其他说明:文中强调了技术催款并非为了惩罚客户,而是为了建立良好的契约精神。同时,作者分享了一些实用的经验和技巧,如设置合理的调试接口、时间缓冲期和操作提示,确保程序既有效又人性化。

    75页-智慧环卫平台解决方案(2022).pdf

    在当今智慧城市的建设浪潮中,智慧环卫作为城市管理的重要组成部分,正以其独特的魅力引领着环卫行业的变革。本方案旨在通过一系列高科技手段,如物联网、大数据、云计算等,全面提升环卫作业效率与管理水平,为城市居民创造更加清洁、宜居的生活环境。 一、智慧环卫系统概述与核心亮点 智慧环卫系统是一个集机械化保洁、垃圾清运、设施管理、事件指挥调度等多功能于一体的综合性管理平台。其核心亮点在于通过高精度定位、实时监控与智能分析,实现环卫作业的精细化管理。例如,机械化保洁管理子系统能够实时监控机扫车、洒水车等作业车辆的运行状态,自动规划最优作业路线,并根据作业完成情况生成考核评价报表,极大地提高了作业效率与服务质量。同时,垃圾清运管理子系统则通过安装GPS定位设备和油量传感器,对清运车辆进行全方位监控,确保垃圾清运过程的规范与高效,有效解决了城市垃圾堆积与随意倾倒的问题。此外,系统还配备了垃圾箱满溢报警系统,通过智能感应技术,当垃圾箱内垃圾达到预设高度时自动报警,提醒作业人员及时清运,避免了因垃圾满溢而引发的居民投诉与环境污染。 二、智慧环卫系统的趣味性与知识性融合 智慧环卫系统不仅实用性强,还蕴含着丰富的趣味性与知识性。以餐厨垃圾收运管理子系统为例,该系统通过为餐厨垃圾收运车辆安装GPS定位、车载称重、视频监控等多种感知设备,实现了对餐厨垃圾收运过程的全程监控与智能管理。作业人员可以通过手机APP实时查看车辆位置、行驶轨迹及收运情况,仿佛在玩一场现实版的“垃圾追踪游戏”。同时,系统还能自动生成餐厨垃圾收运统计报表,帮助管理人员轻松掌握收运量、违规情况等关键数据,让数据管理变得既科学又有趣。此外,中转站视频监控子系统更是将趣味性与实用性完美结合,通过高清摄像头与双向语音对讲功能,实现了对中转站内外环境的实时监控与远程指挥,让管理人员足不出户就能掌控全局,仿佛拥有了一双“千里眼”和一对“顺风耳”。 三、智慧环卫系统的未来展望与社会价值 随着科技的不断进步与智慧城市建设的深入推进,智慧环卫系统将迎来更加广阔的发展前景。未来,智慧环卫系统将更加注重数据的深度挖掘与分析,通过大数据与人工智能技术,为城市环卫管理提供更加精准、高效的决策支持。同时,系统还将加强与其他城市管理系统的互联互通,实现资源共享与协同作战,共同推动城市管理的智能化、精细化水平。从社会价值来看,智慧环卫系统的推广与应用将有效提升城市环境卫生质量,改善居民生活环境,提升城市形象与竞争力。此外,系统还能通过优化作业流程、减少资源浪费等方式,为城市可持续发展贡献重要力量。可以说,智慧环卫系统不仅是城市管理的得力助手,更是推动社会进步与文明发展的重要力量。

    spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar中文-英文对照文档.zip

    # 【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar中文-英文对照文档.zip】 中包含: 中文-英文对照文档:【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar中文-英文对照文档.zip,java,spring-ai-autoconfigure-vector-store-mongodb-atlas-1.0.0-M7.jar,org.springframework.ai,spring-ai-auto

    MATLAB多目标粒子群算法优化冷热电联供系统运行成本与能效

    内容概要:本文介绍了利用MATLAB实现多目标粒子群算法(MOPSO),用于优化冷热电联供(CCHP)系统的运行。文中详细描述了系统架构,包括燃气轮机、电制冷机、锅炉以及风光机组等设备的协同工作。通过引入多目标优化,同时追求最低运行成本和最高综合能效。算法实现了自适应惯性权重调整、动态边界处理、非支配排序等关键技术,显著提升了优化性能。实验结果显示,相比传统方案,该方法能够节省15%以上的运营成本,并提高系统能效23.7%,减少碳排放18.2%。 适用人群:从事能源管理、电力系统优化的研究人员和技术人员,尤其是对MATLAB编程有一定基础的人士。 使用场景及目标:适用于需要进行冷热电联供系统优化的企业或研究机构,旨在寻找成本与能效之间的最佳平衡点,提供多种可供选择的优化方案,帮助决策者制定合理的运行策略。 其他说明:代码设计注重实用性,包含详细的注释和模块化的文件结构,便于理解和修改。此外,还提供了24小时调度结果的三维可视化展示,直观地反映了不同目标间的权衡关系。

    【医疗影像分析】深度学习技术在医学影像诊断中的多维度优势及典型应用:从自动特征提取到临床价值创造

    内容概要:深度学习在医疗影像分析中展现出多维度的优势。首先,它能够自动特征提取并高效学习,通过多层神经网络自动识别医学影像中的复杂特征,无需人工干预,并能整合多种模态的数据,如CT、MRI、X光等,结合患者其他信息建立更全面的诊断模型。其次,在高精度诊断与效率提升方面,深度学习模型在多个任务中的准确率普遍超过90%,基于GPU加速的模型还能实现快速影像分析。第三,其具有复杂的场景适应性与创新应用,可以进行精准分割、三维重建以及长尾问题与罕见病的识别。第四,从临床价值来看,它减轻了医生的工作负担,促进了医疗资源的公平化。最后,深度学习还具有良好的可扩展性,支持跨学科研究,开源生态也有助于标准化建设。尽管存在数据标注依赖、模型可解释性和计算资源限制等问题,但深度学习的应用正逐步从辅助诊断向精准治疗、预后预测等全流程渗透。 适合人群:医疗影像研究人员、临床医生、AI医疗从业者。 使用场景及目标:①了解深度学习在医疗影像分析中的具体优势和技术细节;②探索深度学习应用于医疗影像分析的新思路和新方法;③评估深度学习技术在实际临床环境中的可行性。 其他说明:深度学习虽然具有诸多优势,但在实际应用中还需考虑数据标注质量、模型可解释性和计算资源等因素,同时应关注技术创新与伦理规范的平衡。

    塘沽市民滨海旅游与生态意识的调查报告.doc

    塘沽市民滨海旅游与生态意识的调查报告.doc

    spring-ai-mcp-1.0.0-M6.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    UDQsinepwm_1p_UPFC.png

    UDQsinepwm_1p_UPFC

    spring-ai-zhipuai-1.0.0-M6.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    3dmax插件LMExporter.ms

    3dmax插件LMExporter

    基于MATLAB的多目标遗传算法在分布式电源选址定容中的应用与优化

    内容概要:本文详细介绍了利用MATLAB实现多目标遗传算法(MOGA)解决分布式电源选址定容问题的方法。首先,通过建立33节点配电网模型,采用稀疏矩阵表示线路连接关系,简化了存储结构。接着定义了三个主要目标函数:降低网损、减少总容量成本以及提高电压稳定性。为了加快算法收敛速度,在种群初始化时引入了定向变异策略,并在交叉变异过程中加入局部搜索。此外,针对不同场景采用了前推回代法和牛顿拉夫逊法相结合的潮流计算方法,确保计算精度的同时提高了效率。最后,通过Pareto前沿曲线展示了多种可行解之间的权衡关系,帮助决策者根据实际情况做出最佳选择。 适用人群:从事电力系统规划、分布式能源管理和智能电网研究的专业人士和技术爱好者。 使用场景及目标:适用于需要综合考虑电网损耗、投资成本和电压稳定性的分布式电源选址定容项目。旨在寻找最优的电源安装位置及其容量配置方案,从而提升整个配电系统的性能。 其他说明:文中提到的技术细节如稀疏矩阵的应用、混合潮流计算方法等对于提高算法效率至关重要;而Pareto前沿曲线则有助于直观地理解和比较不同的设计方案。

    【误差自适应跟踪方法AUV】自适应跟踪(EAT)方法研究附Matlab代码&Simulin.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    spring-ai-mongodb-atlas-store-1.0.0-M5.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    COMSOL软件中永磁体磁场分布仿真的详细指南与技巧

    内容概要:本文深入探讨了使用COMSOL进行永磁体磁场分布仿真的方法和技术要点。首先介绍了永磁体的基本建模步骤,强调了磁化方向、材料参数和边界条件设置的重要性。接着讨论了网格划分的技巧,特别是在磁场变化剧烈区域的手动加密方法。然后讲解了仿真后的数据处理和可视化手段,如切片图、箭头图和流线图的应用。此外,文中还分享了一些常见的错误及其解决办法,以及如何通过参数化扫描优化仿真结果。最后,作者通过具体案例展示了如何利用COMSOL进行复杂磁场分布的模拟,并提供了多个实用的代码片段。 适合人群:从事电磁场仿真工作的科研人员、工程师及研究生。 使用场景及目标:帮助用户掌握COMSOL中永磁体磁场仿真的全流程,提高仿真的准确性和效率,适用于教学、科研和工业设计等领域。 其他说明:文章不仅涵盖了理论知识,还包括大量实战经验和技巧,能够有效指导初学者和有一定基础的研究人员更好地理解和应用COMSOL进行磁场仿真。

Global site tag (gtag.js) - Google Analytics