和技术人员讨论TreeMap通过值对象排序的方法,记录一下

现在实现通过ReadData对象中的itemNo属性实现排序

public class ReadData {private String itemCatagory;private String itemNo;private String itemName;public String getItemCatagory() {return itemCatagory;}public void setItemCatagory(String itemCatagory) {this.itemCatagory = itemCatagory;}public String getItemNo() {return itemNo;}public void setItemNo(String itemNo) {this.itemNo = itemNo;}public String getItemName() {return itemName;}public void setItemName(String itemName) {this.itemName = itemName;}
}

第一种方法,初学者常写的方法,定义Comparator比较器,中间经过集合转换实现

public class DemoTest {public static void main(String[] args) {TreeMap<String,ReadData> treeMap = new TreeMap<String,ReadData>();ReadData readData1 = new ReadData();ReadData readData2 = new ReadData();readData1.setItemNo("002");readData2.setItemNo("001");treeMap.put("111",readData1);treeMap.put("222",readData2);Map<String, ReadData> resultMap = sortMapByValue(treeMap); //按Value进行排序for (Map.Entry<String, ReadData> entry : resultMap.entrySet()) {System.out.println(entry.getKey() + " " + entry.getValue().getItemNo());}}public static Map<String,ReadData> sortMapByValue(Map<String,ReadData> oriMap){if (oriMap == null || oriMap.isEmpty()) {return null;}Map<String, ReadData> sortedMap = new LinkedHashMap<String, ReadData>();List<Map.Entry<String, ReadData>> entryList = new ArrayList<Map.Entry<String, ReadData>>(oriMap.entrySet());Collections.sort(entryList, new MapValueComparator());Iterator<Map.Entry<String, ReadData>> iter = entryList.iterator();Map.Entry<String, ReadData> tmpEntry = null;while (iter.hasNext()) {tmpEntry = iter.next();sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());}return sortedMap;}
}class MapValueComparator implements Comparator<Map.Entry<String, ReadData>>{@Overridepublic int compare(Map.Entry<String, ReadData> me1, Map.Entry<String, ReadData> me2) {return me1.getValue().getItemNo().compareTo(me2.getValue().getItemNo());}
}

第二种方法,通过集合的stream流结合Comparator比较器实现(java8高级特性应用半成品)

public class DemoTest {public static void main(String[] args) {TreeMap<String,ReadData> treeMap = new TreeMap<String,ReadData>();ReadData readData1 = new ReadData();ReadData readData2 = new ReadData();readData1.setItemNo("002");readData2.setItemNo("001");treeMap.put("111",readData1);treeMap.put("222",readData2);Map<String, ReadData> sortedMap = treeMap.entrySet().stream().sorted(new MapValueComparator()).collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(oldVal,newVal) -> oldVal,LinkedHashMap::new));sortedMap.entrySet().forEach(System.out::println);}class MapValueComparator implements Comparator<Map.Entry<String, ReadData>>{@Overridepublic int compare(Map.Entry<String, ReadData> me1, Map.Entry<String, ReadData> me2) {return me1.getValue().getItemNo().compareTo(me2.getValue().getItemNo());}
}

第三种方法,和方法二类似

public class DemoTest {public static void main(String[] args) {TreeMap<String,ReadData> treeMap = new TreeMap<String,ReadData>();ReadData readData1 = new ReadData();ReadData readData2 = new ReadData();readData1.setItemNo("002");readData2.setItemNo("001");treeMap.put("111",readData1);treeMap.put("222",readData2);Map<String, ReadData> map =  new LinkedHashMap<>();treeMap.entrySet().stream().sorted(new MapValueComparator()).forEachOrdered(e -> map.put(e.getKey(),e.getValue()));map.entrySet().forEach(System.out::println);}
}class MapValueComparator implements Comparator<Map.Entry<String, ReadData>>{@Overridepublic int compare(Map.Entry<String, ReadData> me1, Map.Entry<String, ReadData> me2) {return me1.getValue().getItemNo().compareTo(me2.getValue().getItemNo());}
}

第四种方法,完全使用stream与functional方法实现,只需一行代码(java8高级特性应用成品)

public class DemoTest {public static void main(String[] args) {TreeMap<String,ReadData> treeMap = new TreeMap<String,ReadData>();ReadData readData1 = new ReadData();ReadData readData2 = new ReadData();readData1.setItemNo("002");readData2.setItemNo("001");treeMap.put("111",readData1);treeMap.put("222",readData2);Map<String, ReadData> map =  new LinkedHashMap<>();treeMap.entrySet().stream().sorted(Comparator.comparing(ReadData -> ReadData.getValue().getItemNo())).forEachOrdered(e -> map.put(e.getKey(),e.getValue()));map.entrySet().forEach(System.out::println);}
}

结论,java8高级特性真香!

TreeMap通过值对象属性排序相关推荐

  1. Java通用工具类之按对象属性排序工具类

    本工具类为按对象属性排序工具类,实现的功能: 1.按对象的一个属性和多个属性进行排序. 2.按对象属性正序和倒序排列. 3.完美支持int等基础类和Integer等包装类. 4.完美支持属性为实现了C ...

  2. json对象数组按对象属性排序

    //json对象数组按对象属性排序 function JsonSort(obj, field, sortby) {this.obj = obj;this.field = field;this.sort ...

  3. JavaScript 数组排序,随机排序,查找最大(最小)值,对象属性进行排序

    JavaScript 数组排序 1.数组排序- - -sort() 根据首字符进行排序,a-z.注意:会改变原数组 var array=["c","d",&qu ...

  4. java arraylist comparable_Java 两种ArrayList集合自定义对象属性排序,Comparator接口 或 Comparable接口...

    1,Comparator接口 -- 重写Comparator public class User { private String id; private String name; public Us ...

  5. vue,js中json对象数组按对象属性排序(sort方法)根据英文首字母进行排序

    for (let i = 0; i < this.tableData.length; i++) {const itemList = this.tableData[i] as any;const ...

  6. [jQuery基础] jQuery对象 -- 属性操作

    属性操作 属性和属性节点 1.什么是属性? 对象身上保存的变量就是属性 2.如何操作属性? 对象.属性名称 = 值 对象.属性名称 对象["属性名称"] = 值 对象[" ...

  7. DDD之实体与值对象

    传统的系统架构设计阶段,通常我们会将关注点放在数据上面,而不是领域上面.这种设计风格在软件开发中,使数据库占据了主导地位,我们总是有限考虑数据的属性(对应数据库的列)和关联关系(外键关联),而不是富有 ...

  8. 按值对对象属性进行排序

    如果我有一个JavaScript对象,例如: var list = {"you": 100, "me": 75, "foo": 116, & ...

  9. 按对象某属性排序的几种方法

    按对象某属性排序的几种方法: 第一种,可以实现边添加边排序,需要用到TreeSet. 第二种,用数组存放对象们,但是不需单独取出某属性排列好再重存,而是在原数组上用比较器重新排一次序.需要用到Arra ...

  10. java 对象多属性排序_java list按照元素对象的指定多个字段属性进行排序

    package com.enable.common.utils; import java.lang.reflect.Field; import java.text.NumberFormat; impo ...

最新文章

  1. jsp ul设置滚动条_jquery实现Li滚动时滚动条自动添加样式的方法
  2. ASCII、Unicode、GBK和UTF-8字符编码的区别联系
  3. 【学习——字符串】字符串之一网打尽quq
  4. URL编码以及GET和POST提交乱码解决方案
  5. python爬去学校_python爬取学校教务系统
  6. 编程学习初体验(5. 如何自学编程)(3)
  7. Oracle增大redo log file的方法
  8. java 定时器 的中断程序,STM32定时器中断
  9. P1081-开车旅行【倍增,链表,dp】
  10. linux命令解释程序实验,实验二 命令解释程序的使用
  11. java 内置web服务器_Webstorm 2016内置web服务器配置
  12. Internet Explorer 无法显示网页
  13. 2018杭电多校第二场1006(容斥原理,组合数学)
  14. js面向对象--理解闭包
  15. 地理信息系统(汤国安)重点整理和推导(第一章)
  16. 盛金公式解一元三次方程_用盛金公式求解一元三次方程
  17. 格西烽火 串口助手(二)
  18. vue的介绍-基本语法
  19. Android双系统实现
  20. 计算机自定义桌面,如何自定义电脑桌面的图标显示

热门文章

  1. 微信小程序--瀑布流布局
  2. 魔力岛服务器稳定吗,魔力岛《飘渺仙剑》寻找GM你愉我乐线上活动
  3. acm 算法 java_有关acm算法的一道java题
  4. 1214_嵌入式硬件常识积累_什么是TTL电平
  5. python学习笔记_week19
  6. Drillbeach---第二章 Drillbench 5.1 Dynaflodrill 用户指南
  7. DongDong认亲戚(map+并查集)
  8. 我爱 Ruby 的三十七个理由
  9. 路由器间歇性断网,而且不重启路由器不会自动恢复的问题
  10. Datawhale组队学习周报(第042周)