I want to create a TreeMap in Java with a custom sort order. The sorted keys which are string need to be sorted according to the second character. The values are also string.

Sample map:

Za,FOO

Ab,Bar

解决方案

You can use a custom comparator like this:

Comparator secondCharComparator = new Comparator() {

@Override public int compare(String s1, String s2) {

return s1.substring(1, 2).compareTo(s2.substring(1, 2));

}

};

Sample:

SortedMap map =

new TreeMap(secondCharComparator);

map.put("Za", "FOO");

map.put("Ab", "BAR");

map.put("00", "ZERO");

System.out.println(map); // prints "{00=ZERO, Za=FOO, Ab=BAR}"

Note that this simply assumes that the String has a character at index 1. It throws StringIndexOutOfBoundsException if it doesn't.

Alternatively, you can also use this comparison:

return s1.charAt(1) - s2.charAt(1);

This subtraction "trick" is broken in general, but it works fine here because the subtraction of two char will not overflow an int.

The substring andcompareTo solution above is more readable, though.

See also:

java sortedmap,使用自定义Comparator在Java中创建SortedMap相关推荐

  1. java插件获取首选项_Eclipse RCP 中创建自定义首选项,并能读取首选项中的值

    Eclipse RCP的插件中若想自己定义首选项需要扩展扩展点: org.eclipse.core.runtime.preferences //该扩展点用于初始化首选项中的值 org.eclipse. ...

  2. java excel 展开折叠_Java在Excel中创建多级分组、折叠或展开分组的实现

    本文介绍通过java程序在excel创建分组的方法,可对行或列分组进行分组并设置明细数据是否展开或折叠.设置数据分组并展开或折叠时,可通过以下方法: 方法一: 通过方法sheet.groupbyrow ...

  3. Java并发基础01. 传统线程技术中创建线程的两种方式

    传统的线程技术中有两种创建线程的方式:一是继承Thread类,并重写run()方法:二是实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread.这两种方式 ...

  4. java gui 控制台_在GUI面板中创建Java控制台

    这是一个功能强大的课程.您可以将此实例安装到系统中并使用以下错误: PrintStream con=new PrintStream(new TextAreaOutputStream(...)); Sy ...

  5. java GUI怎么输入_在Swing中创建Java GUI以进行表单输入

    好吧,我已经浏览了整个互联网,但却未能找到这个问题的答案,所以也许有人可以提供一些见解. 我正在开发一个相对简单的Java应用程序,它将取代目前用于系统访问请求的Word文档.它旨在允许表单输入新的员 ...

  6. java 生成hprof,java – -XX:HeapDumpOnOutOfMemoryError未在OOM中创建hprof文件

    我使用以下参数启动我的java代码(Vista中的1.6.0_16)-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath = .. / logs.我运行代码, ...

  7. windows快捷键自定义_在Windows中创建自定义Windows键盘快捷键

    windows快捷键自定义 Nearly everyone uses keyboard shortcuts of some sort on their Windows system but what ...

  8. html5创建自定义标签,在html中创建自定义标签

    创建并使用自定义标签 Web Components 标准非常重要的一个特性是,它使开发者能够将HTML页面的功能封装为 custom elements(自定义标签),本篇介绍使用 CustomElem ...

  9. java 8流自定义收集器_Java 8编写自定义收集器简介

    java 8流自定义收集器 Java 8引入了收集器的概念. 大多数时候,我们几乎不使用Collectors类中的工厂方法,例如collect(toList()) , toSet()或其他更有趣的方法 ...

最新文章

  1. 如何删除linux的root权限,永久删除现代Linux的root权限
  2. android test.apk,app-debug.apk和app-debug-androidTest.apk在安装macaca-android模块的时候build失败...
  3. Python3 PyQt5 PyCharm 环境搭建
  4. mysql优化varchar索引_MySQL优化--概述以及索引优化分析
  5. Spark内核解析之五:Spark Shuffle解析
  6. 16位LED恒流源芯片TC5020A,32*128点阵屏驱动函数
  7. RMAN数据库完全备份和恢复
  8. Linux中文显示:解决Windows传到linux文件中文乱码
  9. excel两行数据匹配【vlookup、countif】
  10. KubeSphere又开始对接公有云了,这一次是阿里云 SLB
  11. linux命令总结-ls
  12. gta5因为计算机丢失,GTA5丢失MSVCR100.dll怎么办 修复方法介绍
  13. Unity学生作业:太阳地球月亮自转和公转
  14. Springboot整合RocketMQ遇到的问题
  15. linux下编译GCC
  16. 58同城疑收购优信二手车:优势增补布局未来市场
  17. Spotify 模型
  18. xrdp在ylmf下的问题
  19. Microsoft Visio 摄像机图标
  20. linux各种IPC机制

热门文章

  1. 给图像马赛克处理的程序c语言,C#中的图像处理(附带生成马赛克范例)
  2. 一键搭建php环境整合套件,DedeAMPZ环境整合套件搭建PHP运行开发环境
  3. CPU 中通用寄存器的作用
  4. ajax请求的优缺点
  5. idea导出jar包无法运行
  6. 堡垒机、堡垒机的原理
  7. 不归零制编码、曼彻斯特编码和差分曼彻斯特编码实验
  8. centos8开放3306端口
  9. js 判断mac地址是否为组播地址
  10. 双向链表的定义及基本操作