按值维护 SortedMap

2024-02-11

众所周知,SortedMap 维护按键排序的条目。我在这个论坛上阅读了很多帖子,并看到了很多按值对 SortedMap 进行排序的示例。但是,正如您所知,当我将一个项目放入默认的 SortedMap 时,它不会再次对 Map 进行排序,只是将这个新条目放在它应该在的位置。

例如,

SortedMap<String,Person> sortedMap = new TreeMap();
Person p1 = new Person("John",38);
sortedMap.put(p1.getName(), p1);
Person p2 = new Person("Tom",34);
sortedMap.put(p2.getName(), p2); // does not sort, maintains sorted set by comparing the other values 
Person p3 = new Person("Susan",21);
sortedMap.put(p3.getName(), p3); // does not sort, maintains sorted set by comparing the other values

在这个论坛的许多线程中,我看到很多代码通过调用排序方法按值对 SortedMap 进行排序,例如:

sortedMap.sort(sortedMap.entries()); 

正在调用此方法或其他方法来获取已排序的值。

但是,我需要一个 Map 实现,它可以使值保持排序,而不需要调用排序方法,正如我在上面解释的那样。例如,在上面的代码中我可以调用firstKey()方法;但我需要调用firstValue() 方法。

Person minimumAgePerson = sortedMap.firstValue().
System.out.println(minimumAgePerson.getName()); // it should print "Susan"

SortedSet 不适合我的要求,因为我可以放置一些新对象( Person ),其键值已经在映射中,这些刚刚添加的条目应该覆盖现有对象(所以我需要一个映射):

Person p4 = new Person("Susan",39);
sortedMap.put(p4.getName(),p4);
Person newMinimumAgePerson = sortedMap.firstValue(); 
System.out.println(newMinimumAgePerson.getName()); // it should print "Tom"

是否有实现来完成此任务,或者我需要自己实现排序集?


通常,处理此类问题的最简单、最安全的方法是编写一个使用两个不同标准集合的类。该类可以准确地提供您需要的方法,而不必符合任何 java.util 接口。

鉴于规定的要求,我将使用 SortedMap 来包含值,并结合将键映射到值的 HashMap。为了防止重复键,将键值对放入HashMap中,检查放入结果。如果键已存在,请在添加新值之前从 SortedMap 中删除旧值。

如果您有其他要求,这种特殊的设计可能无法涵盖所有​​内容,但组合 java.util 结构的概念通常是有用的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按值维护 SortedMap 的相关文章

  • Java Runtime.getRuntime().freeMemory() 问题

    我搜索并看到了一些线程 但没有一个能够解决我遇到的具体问题 我正在尝试使用以下方式监视我的内存使用情况Runtime getRuntime freeMemory Runtime getRuntime maxMemory and Runtim
  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • 嵌套字典中的 Django 模板

    我正在使用 Django 模板 并且遇到了嵌套字典的一个问题 Dict result dict type 0 file name abc count 0 type 1 file name xyz count 50 我的 HTML 文件中的模
  • “java.net.MalformedURLException:未找到协议”读取到 html 文件

    我收到一个错误 java net MalformedURLException Protocol not found 我想读取网络上的 HTML 文件 mainfest uses permission android name android
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • Spring Security SAML2 使用 G Suite 作为 Idp

    我正在尝试使用 Spring Security 5 3 3 RELEASE 来处理 Spring Boot 应用程序中的 SAML2 身份验证 Spring Boot 应用程序将成为 SP G Suite 将成为 IDP 在我的 Maven
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 如何避免 ArrayIndexOutOfBoundsException 或 IndexOutOfBoundsException? [复制]

    这个问题在这里已经有答案了 如果你的问题是我得到了java lang ArrayIndexOutOfBoundsException在我的代码中 我不明白为什么会发生这种情况 这意味着什么以及如何避免它 这应该是最全面的典范 https me
  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • 是否可以使用 Java Guava 将函数应用于集合?

    我想使用 Guava 将函数应用于集合 地图等 基本上 我需要调整 a 的行和列的大小Table分别使所有行和列的大小相同 执行如下操作 Table
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复

随机推荐

  • 在元素的父元素之后插入

    在下面的示例中 我需要什么样的选择器才能插入 test3 类的父级 divouter 之后 谢谢 div class divouter div class divinner div div
  • 如何在浏览器中使用模块,同时也引用 DevTools 中的变量和函数?

    我的 HTML 设置如下 所有 ES6 模块都工作正常 唯一的问题是我现在无法引用 DevTools 中的任何内容 例如使用控制台并输入变量以查看其值或手动使用函数 如何在能够使用 DevTools 的同时导入模块 谢谢 在 DevTool
  • Maven2:如何确定 Maven 构建正在使用特定的插件版本?

    我刚刚发现 Maven 插件管理听起来很奇怪 在进行网站生成时 我想使用特定版本的 Maven 网站插件 以便实现特定的功能 假设我想使用这个插件的 2 0 1 版本 如果我使用 POM 的报告部分来使用以下命令生成项目站点 mvn sit
  • Phonegap 软键盘覆盖输入字段[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我的 Phonegap 3 1 中的软键盘覆盖了我的 Android 4 x 中的输入字段 这个问题一直很烦人 我刚才差点就发帖问了 但突然
  • 是否可以将react-datepicker与react hooks表单一起使用?

    是否可以将react datepicker与react hooks表单一起使用 我尝试了以下示例 但没有运气 import React useState from react import styles css import useForm
  • 将字符串解析为 DirectoryInfo 的正确方法? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个程序 为了避免复杂化 我需要将给定的字符串变量解析为 DirectoryInfo 我想知道是否可以将字符串解析为 Direc
  • 如何制作骨头形状的纽扣

    我目前正在为我的网站试验一个按钮 我希望它看起来像一个普通按钮 但是一旦你将其悬停 它就会变成一根骨头 我的网站是关于狗的 所以我使用了一个已经存在的 codepen 项目 最终得到了这个 root bg 1a1e24 color eee
  • 使用 jQuery 重复元素

    我确信这对于正确的人来说是显而易见的 但是如何使用 jQuery 重复一个元素呢 本质上 我希望 jQuery 无限次重复内联元素 就像您使用 CSS 来重复背景纹理的图形一样 我一直在研究 clone 和 each 但确实可以使用一些指针
  • AngularJS:指令隔离范围 - 范围变量未定义

    请有人能给我解释一下为什么吗attrDir的范围变量是可见的 并且oneWay不是吗 我以为scope 也是孤立的 angular module test angular module test directive attrDir attr
  • 访问项目资源中的图像?

    如何在运行时访问已添加到项目资源中的图像 我希望能够做这样的事情 if value picBox1 image Resources imageA else picBox2 image Resources imageB Something I
  • MongoDB toArray 性能

    我正在尝试从 Mongo Node 中的术语集合构建类别树 但首先我使用 in 选择所有树元素 console time termsCol find var terms await termsCol find term id in flat
  • gitlab API有速率限制吗

    github对OAuth客户端的速率限制为5000 小时 但我找不到相同的信息gitlab 除了创建新用户和重置密码6次 分钟 是否意味着没有限制 答案是不再是 不 https gitlab com gitlab org gitlab ru
  • iceConnectionState 已断开连接(通过互联网使用时)

    这个问题以前曾被问过 但我还没有找到答案 我基本上遇到了与描述相同的问题here https stackoverflow com questions 34405816 peerjs webrtc iceconnectionstate fai
  • 使用 openCV 从图像中读取数字和字母

    我正在开发一个应用程序 使用 c 中的 opencv 读取图像中的字母和数字 我首先将给定的彩色图像和颜色模板更改为二值图像 然后调用方法cvMatchTemplate 这个方法只是突出显示了模板匹配的区域 但不清楚 我只是不想看到该区域
  • 如何保留从常规终端到 gnu 屏幕的 emacs 颜色

    作为记录 我使用的是 OSX 雪豹 当我直接从终端使用 emacs 时 我有一个我非常满意的颜色集 例如 用于 c c 黑底绿 红色注释 彩色关键字 等等 其中一些是在我的 终端首选项 中设置 有些位于我的 emacs 文件中 见下文 当我
  • JFreeChart 链接轴

    我创建了一个带有两个独立 JFree 图表的框架 以 2x1 网格布局保存 顶部图表显示 Canlestick 图表 底部图表显示时间序列图 我想要做的是链接两个图表显示的 X 轴 以便当我放大一个图表时 另一个图表会缩放到相应的时间段 这
  • netbeans 中的 libtesseract303.dll 问题

    我正在实施 OCR 系统 当我将 dll 文件放在 java 类路径上时 出现以下错误 Exception in thread main java lang UnsatisfiedLinkError G software apache to
  • WPF:更改组合框的 ItemTemplate 会删除您键入时向下跳转列表的功能。有任何解决这个问题的方法吗?

    PersonVM cs public class MainWindowVM public MainWindowVM PersonList new ObservableCollection
  • 类的模式是其自身的列表

    考虑以下 object Main case class Foo bar Int extends FooList val self List Foo this Nil abstract class FooList val self List
  • 按值维护 SortedMap

    众所周知 SortedMap 维护按键排序的条目 我在这个论坛上阅读了很多帖子 并看到了很多按值对 SortedMap 进行排序的示例 但是 正如您所知 当我将一个项目放入默认的 SortedMap 时 它不会再次对 Map 进行排序 只是