List<Object> 根据 编码分组,取最大修改时间,转换为 <String,Date>

时间: 2023-11-11 07:24:49 浏览: 150
可以使用 Java 8 的 Stream API 来实现这个需求。具体实现步骤如下: 1. 使用 Stream 的 `collect()` 方法将 List 转换为 Map,其中键为编码,值为包含编码和修改时间的对象。 2. 使用 Stream 的 `map()` 方法将 Map 中的对象转换为包含编码和修改时间的字符串。 3. 使用 Stream 的 `groupingBy()` 方法将字符串按照编码分组。 4. 使用 Stream 的 `max()` 方法获取每组中修改时间最大的对象。 5. 使用 Stream 的 `map()` 方法将每组中的对象转换为包含编码和修改时间的键值对。 代码如下: ```java List<Object> list = ...; // 给定的 List Map<String, Object> map = list.stream() .collect(Collectors.toMap( obj -> ((YourObject) obj).getEncoding(), // 键为编码 obj -> obj, // 值为包含编码和修改时间的对象 (a, b) -> a.getModifiedTime() > b.getModifiedTime() ? a : b // 合并时取修改时间最大的对象 )); Map<String, Date> result = map.entrySet().stream() .map(entry -> entry.getValue().getEncoding() + "," + entry.getValue().getModifiedTime()) // 将对象转换为字符串 .collect(Collectors.groupingBy( str -> str.split(",")[0], // 按照编码分组 Collectors.maxBy(Comparator.comparing(str -> str.split(",")[1]))) // 获取每组中修改时间最大的字符串 .entrySet().stream() .collect(Collectors.toMap( Map.Entry::getKey, // 键为编码 entry -> new Date(Long.parseLong(entry.getValue().get().split(",")[1])))); // 值为修改时间 ``` 这样就可以将 List<Object> 根据编码分组,取最大修改时间,转换为 <String,Date> 的 Map 了。
阅读全文

相关推荐

vo类 public class ArealRainfallVo implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "区域编码") private String code; @ApiModelProperty(value = "雨量总和") private BigDecimal value; } Mapper类 public interface WeightBetweenObjectAndRainfallStationMapper extends BaseMapper<WeightBetweenObjectAndRainfallStation> { List<ArealRainfallVo> ListbySumList (List list); } mapper配置类 <mapper namespace="com.ndwp.jboot.bootstrap.mapper.WeightBetweenObjectAndRainfallStationMapper"> <select id="ListbySumList" resultType="com.ndwp.jboot.bootstrap.entity.vo.ArealRainfallVo"> SELECT code, SUM(CASE <foreach collection="list" item = "item"> WHEN rainfall_station_code = '${item.getCode()}' THEN weight * ${item.getValue()} </foreach> END ) AS value FROM bootstrap.weight_between_object_and_rainfall_station GROUP BY code; </select> </mapper> 服务类 public interface IWeightBetweenObjectAndRainfallStationService extends BaseService<WeightBetweenObjectAndRainfallStation> { List<ArealRainfallVo> listAreaRainfall(Date start, Date end); } 服务实现类 @Service public class WeightBetweenObjectAndRainfallStationServiceImpl extends BaseServiceImpl<WeightBetweenObjectAndRainfallStationMapper, WeightBetweenObjectAndRainfallStation> implements IWeightBetweenObjectAndRainfallStationService { @Autowired IDataHistoricRainfallService dataHistoricRainfallService; @Override public List<ArealRainfallVo> listAreaRainfall(Date start, Date end) { List pointRainfallSumVOS = dataHistoricRainfallService.listAllPointRainfallByTime(start, end); return baseMapper.ListbySumList(pointRainfallSumVOS); } } 控制台打印的sql语句能够正常运行,结合代码分析一下为何会返回四个空对象?

优化这串代码using Oracle.ManagedDataAccess.Client; public static OracleDbType ConvertOracleDbType(Type type) { switch(type.Name.ToLower()) { case "decimal": return OracleDbType.Decimal; case "string": return OracleDbType.Varchar2; case "datetime": return OracleDbType.Date; default: return OracleDbType.Varchar2; } } public static dynamic InitList(Type type) { switch(type.Name.ToLower()) { case "decimal": return new List<decimal>(); case "string": return new List<string>(); case "datetime": return new List<DateTime>(); default: return new List<string>(); } } public static void AddValue(dynamic list, Type type, object value) { switch(type.Name.ToLower()) { case "decimal": list.Add(Convert.ToDecimal(value)); break; case "string": list.Add(Convert.ToString(value)); break; case "datetime": list.Add(Convert.ToDateTime(value)); break; default: list.Add(Convert.ToString(value)); break; } } public static int BulkCopy(DataTable dataTable) { string connStr = ""; int result = 0; List<string> sql_column = new List<string>(); List<string> sql_para = new List<string>(); List<OracleParameter> paras = new List<OracleParameter>(); foreach(DataColumn column in dataTable.Columns) { sql_column.Add(column.ColumnName); sql_para.Add(":" + column.ColumnName); dynamic list = InitList(column.DataType); foreach(DataRow dr in dataTable.Rows) { AddValue(list, column.DataType, dr[column]); } OracleParameter para = new OracleParameter(column.ColumnName, ConvertOracleDbType(column.DataType)); para.Value = list.ToArray(); paras.Add(para); } using(var connection = new OracleConnection(connStr)) { connection.Open(); string sql = $"insert into {dataTable.TableName}({string.Join(",", sql_column)}) values ({string.Join(",", sql_para)})"; OracleCommand cmd = new OracleCommand(sql, connection); cmd.Parameters.AddRange(paras.ToArray()); cmd.ArrayBindCount = dataTable.Rows.Count; result = cmd.ExecuteNonQuery(); connection.Close(); } return result; }

最新推荐

recommend-type

"Abaqus插件打包:泰森多边形生成与随机裂缝信息获取的全方位解决方案",abaqus插件打包, 裂缝信息获取,包括cohesive和xfem裂缝信息获取,泰森多边形生成,全局插入cohesive单

"Abaqus插件打包:泰森多边形生成与随机裂缝信息获取的全方位解决方案",abaqus插件打包, 裂缝信息获取,包括cohesive和xfem裂缝信息获取,泰森多边形生成,全局插入cohesive单元。 随机生成泰森多边形。 二维 三维cohesive单元全局插入,可实现不受预置裂缝位置的影响而实现裂缝随机扩展模拟。 裂缝信息获取,提取二维裂缝长度,三维裂缝面积等 ,abaqus插件打包; 裂缝信息获取; 泰森多边形生成; 全局插入cohesive单元; 随机生成泰森多边形; 二/三维cohesive单元插入; 裂缝扩展模拟; 提取二维/三维裂缝尺寸。,Abaqus裂缝信息获取与随机泰森多边形插值打包解决方案
recommend-type

基于XML的可编辑树形菜单开源解决方案

XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,具有强大的数据描述能力。由于其结构化特性和灵活性,XML常被用于描述层级关系的数据,比如树状结构的菜单。本文将详细解读"XML Based Tree Menu-开源"这一项目,探讨其在使用XML构建可编辑树菜单以及相关的开源软件应用。 首先,项目标题"XML Based Tree Menu-开源"直接点明了软件的核心特性:基于XML的树形菜单以及开源性。这意味着该软件是基于XML语言来构建其树形菜单,并且源代码对公众开放,用户和开发者可以自由地访问、修改和分发该软件。 在描述中提到了几个关键点:用户友好、易于使用、易于编辑、快速和灵活。这些描述说明了该软件在设计时注重用户体验,提供了简洁直观的界面和功能,让即使是不具备深厚技术背景的用户也能方便地使用和自定义菜单结构。"快速而灵活"则意味着软件在运行时能迅速响应用户的操作,并且能够适应不同场景下的需求变更。 标签"开源软件"说明该项目的源代码是公开的,这通常意味着用户和开发者可以自由使用、复制、修改和分发软件,而不需要支付版税或许可费用。开源软件通常会吸引更多的开发者参与贡献,有助于提高软件的质量、功能和安全性能。 文件列表"Xml_Menu"可能是包含在该项目压缩包中的关键文件之一。根据文件名推测,这个文件可能包含了构成树状菜单结构的基础XML代码,或者是与XML菜单编辑器相关的代码和资源。 从知识点角度来看,此项目涵盖了以下几个方面: 1. XML基础:XML是一种标记语言,用于存储和传输数据。它类似于HTML,但是它专注于数据内容而非显示格式。在本项目中,XML被用来定义树状菜单的结构和内容。 2. 树状菜单设计:树状菜单是一种层级化的导航结构,通常用于组织和展示具有层级关系的信息。在Web设计中,树状菜单可以帮助用户快速导航到网站的特定部分。 3. 可编辑性:项目支持用户对菜单进行编辑,包括添加、删除和修改节点,这样的交互性为用户提供了很大的灵活性,可以根据个人或组织的需求定制菜单内容。 4. 数据库编辑器:虽然描述中未提及,但是提到了"XML数据库编辑器",这可能意味着该软件还包含一个内置的编辑器,使得用户能够直接在软件界面中编辑XML数据,并实时更新菜单结构。 5. 用户体验:项目注重用户友好性,这意味着它具有直观的界面设计和简单的操作流程,即使是技术新手也能快速上手。 6. 开源特性:开源软件的特性使项目得以不断改进和扩展,它允许用户查看和修改源代码,促进了社区合作和知识共享。 7. 多链接处理:该软件可以轻松处理具有潜在数百个链接的站点,这表明它具有处理大量数据的能力,对大型网站的导航管理尤为有用。 综上所述,"XML Based Tree Menu-开源"是一个基于XML构建的树形菜单编辑器,它提供了友好的用户界面,允许用户根据需求快速地编辑和管理站点导航。项目开源的特性有助于社区的贡献和软件的持续发展。XML作为数据交换的标准格式,在此项目中扮演了重要角色,使得菜单的构建和编辑更加灵活高效。
recommend-type

【Fortran编程之旅】:掌握科学计算的古老智慧

# 摘要 Fortran编程语言作为科学计算领域的先驱,一直受到工程和科研人员的青睐。本文旨在介绍Fortran的基础语法和结构,阐述其在科学计算中的特性和应用案例,以及讨论其在现代编程环境中的实践和高级应用。文章首先概述了Fortran的基本语法元素、控制结构、数组和字符串处理方式。随后,深入探讨了Fortran在数值
recommend-type

在 '__init__.pyi' 中找不到引用 'xfeatures2d'怎么解决

在Python中使用OpenCV时,如果遇到在 '__init__.pyi' 中找不到引用 'xfeatures2d' 的错误,通常是因为OpenCV的版本问题。以下是几种可能的解决方法: 1. **安装旧版本的OpenCV**: 有时新版本的OpenCV可能不包含xfeatures2d模块。你可以尝试安装旧版本的OpenCV,例如3.4.2.17。 ```bash pip install opencv-contrib-python==3.4.2.17 ``` 2. **安装OpenCV的contrib模块**: 确保你安装了OpenCV的contrib模块
recommend-type

StarsTail面板:摄影后期堆栈与蒙版神兵利器

### Starspikes Pro 知识点解析 #### 1. StarsTail功能面板介绍 StarsTail是作为Photoshop的一个扩展功能面板,专门针对摄影爱好者和专业人士设计。它的核心优势在于简化了摄影后期处理工作流中的复杂操作,让摄影后期的特定需求,如星芒效果添加和滤镜处理等,通过直观的界面和工具集轻松实现。 #### 2. 堆栈功能应用与效果 堆栈技术在摄影后期处理中是一种高级技术,它通过合成多张图像来达到提高图像质量的目的。StarsTail工具集中的堆栈功能,具体应用效果如下: - **模拟慢门效果**:通过堆栈技术,用户可以在图像处理阶段模拟出长曝光效果,这种效果在实拍时通常需要使用低ISO和物理中性密度滤镜(ND滤镜)来实现。通过Photoshop中的堆栈,可以在不牺牲图像质量的前提下,扩展相机的低ISO表现,从而在一定程度上代替物理ND滤镜或增加减光档数。 - **叠加合成星轨**:堆栈功能对于拍摄星空或星轨尤为有用,它可以实现各种复杂的星轨效果。无论是常规的星轨叠加还是具有特殊效果的星轨,通过堆栈技术都可以得到更加清晰、梦幻的星空照片。 - **无损降噪和扩展动态范围**:进行堆栈处理时,由于是将多张图片叠加合成,所以在动态范围和信噪比上都能得到显著提高,相当于进行了一次无损的降噪和动态范围扩展处理,从而提升了最终图像质量。 #### 3. 蒙版功能的应用 蒙版是图像处理中非常重要的工具,它允许用户对图像的特定区域进行非破坏性编辑。通过蒙版,可以轻松实现对图片局部进行调整,而不会影响到图片的其他部分。 虽然在给定的【描述】中未详细描述蒙版的具体功能,但从专业角度推测,StarsTail可能提供了易于使用的蒙版工具,使得用户能够进行如下操作: - 局部调整:如对特定区域进行颜色调整、亮度/对比度调整等,而不影响其他区域。 - 锐化和模糊:在保留图像整体效果的同时,对需要突出的元素进行锐化处理,或对需要弱化的部分使用模糊效果。 - 精确编辑:蒙版还能够用于精确地去除照片中的不需要的元素,或对照片进行遮罩保护。 #### 4. 应用场景分析 StarsTail的这些功能特别适合以下几种摄影后期处理场景: - 拍摄夜景、城市灯光及星轨时,需要进行长时间曝光的场景模拟。 - 对动态范围要求高的场景,比如逆光拍摄或明暗对比强烈的环境。 - 需要对图片中的特定部分进行精细编辑,而其他部分保持原样的情况。 #### 5. 插件的实用价值与用户群体 对于摄影爱好者和专业人士来说,StarsTail提供了一种高效且专业的图像处理解决方案,可以大幅节省后期处理的时间,并提高最终作品的质量。对于风光摄影、天文摄影等领域,该插件尤其有价值。 #### 6. 产品更新与版本信息 从提供的【压缩包子文件的文件名称列表】来看,StarsTail至少有两个版本,分别为StarsTail20140511和StarsTail20140711。这表明该软件进行了至少一次的更新,每次更新可能都引入了新的功能或改进了用户界面等。 综上所述,StarsTail作为Photoshop的扩展面板,通过堆栈技术和蒙版功能,为摄影后期处理提供了强大且方便的工具,特别是针对风光摄影和天文摄影爱好者。软件的更新迭代也显示了开发团队对产品的持续关注和改进,以满足不断变化的用户需求。
recommend-type

CAM350快捷操作速成:从新手到专家的快速晋升之道

# 摘要 本文详细介绍了CAM350软件的操作技巧与高级功能应用。首先,对CAM350的基础知识、界面布局及其数据输入和预处理方法进行了系统介绍,特别强调了格式转换的技巧和图层数据优化。随后,探讨了如何通过快捷操作、自动化流程和脚本编写提高生产效率。在PCB布局与设计章节中,强调了布局原则、设计规则检查(DRC)以及高级布线策略的重要性。此外,文章还阐述了钻孔与铣削的优化流程,以及机械加工前的模拟
recommend-type

如何实现大屏抽奖的动画效果?

实现大屏抽奖的动画效果可以通过多种方式来完成,具体取决于你所使用的技术栈和平台。以下是一个常见的实现方法,使用HTML、CSS和JavaScript来创建一个简单的抽奖动画效果。 1. **HTML结构**: 首先,创建一个包含所有奖品的HTML结构。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>大屏抽奖动画</ti
recommend-type

Guten Tag: 强化字体编辑的字形标记插件

### 插件名称知识点 GutenTag是一个专门用于字体编辑软件Glyphs中的字形插件。Glyphs是一款专业的Mac字体编辑器,常用于创建和编辑TrueType(.ttf)和OpenType(.otf)字体。GutenTag插件特别针对字体设计者,提供标记字形的功能,使其能够更高效地组织和管理字形库。 ### 标签功能知识点 在GutenTag插件中,"标签"的概念是指对字形进行分类和标记的一种方式。通过标签可以对字形进行分组,使得设计师可以快速识别并找到具有相似特征的字形。标签可以包含字体设计师认为重要的属性,如字形风格(narrow、bold等),或者特定的用途(比如装饰性字形)。标签的使用简化了字体设计中对字形的管理流程,增强了工作效率。 ### 插件特征知识点 - **查看和编辑标签**:GutenTag插件允许用户在字体视图和编辑视图中查看和编辑字形的标签。这种在不同视图中保持一致的功能,保证了设计师无论在进行字体预览还是深入编辑时,都能清楚地了解和管理每个字形的分类。 - **自动补全功能**:为防止在输入标签名称时出现拼写错误,该插件提供了自动补全功能。这类似于其他文本编辑或编程环境中的自动完成功能,它根据已有的标签库提示合适的标签名称。 - **预览标签功能**:通过单击标签右侧的小显示按钮,用户可以预览带有该标签的所有字形。这为设计师提供了直观的视觉反馈,帮助他们快速把握标签所代表的字形集合。 ### 安装和使用流程知识点 - **手动安装**:GutenTag插件需要从GitHub进行下载。下载后,用户需要双击"Guten Tag.glyphsPalette"文件来启动安装。安装过程中系统会提示确认,完成安装后,用户需要退出并重新启动Glyphs软件。 - **访问插件**:安装完成后,用户可以在Glyphs窗口右上角访问Guten Tag插件。插件的这一位置便于设计师快速访问和使用其功能。 ### 可配置的首选项知识点 - **GlyphPreviewSize**:这是一个可配置的首选项,用于设置字形预览的大小。这个选项以整数形式存在,可以被设置为不同的大小值。用户可以根据自己的屏幕尺寸和偏好来调整这一参数,以获得最佳的预览效果。 ### 技术背景知识点 - **Python**:插件的开发语言是Python,这表明了GutenTag插件具有较高的灵活性和扩展性。Python作为一种广泛使用的高级编程语言,因其简洁的语法和强大的库支持,常用于开发各种应用程序和脚本。 - **OpenType特性代码**:插件支持OpenType功能代码的使用,这意味着它可以与支持OpenType特性的软件无缝集成。例如,在CSS中,可以使用OpenType特性来应用字形的特定样式或变体。GutenTag插件通过标签实现了字形的属性组织,使得在OpenType特性的应用中更加方便和直接。 ### 总结 GutenTag插件的引入对于字体设计师来说,是一个提升工作效率的工具。通过其直观的标签系统和便捷的功能设置,设计师可以更加高效地组织和管理字体库中的字形。此外,GutenTag的可配置性和对OpenType特性的支持,使其成为 Glyphs 应用中强大的辅助工具。随着字体设计行业的发展,这种类型的插件将继续优化工作流程,为字体设计者提供更强大的功能支持。
recommend-type

PCB设计高手必备:CAM350高级操作技巧与应用实例深入解析

# 摘要 本文详细介绍了CAM350软件的功能、安装过程以及在PCB设计中的应用。首先概述了CAM350的基本功能和安装要求。接着,深入探讨了PCB设计的原理和规则,包括设计流程、规范和常用规则的应用。文中还提供了高级操作技巧,如布局优化、多层次PCB设计管理以及设计验证与检查。此外,本文通过具体实例分析了CAM350在实际PCB生产中的应用,从
recommend-type

写一个pythorch框架的,用AlexNet进行128*128图像的4分类的程序

以下是一个使用PyTorch框架和AlexNet模型进行128x128图像4分类的示例程序: ```python import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms, models # 定义数据预处理 transform = transforms.Compose([ transforms.Resize((128, 128)), # 将图像大小调整为128x128 transforms.ToTensor(),