博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java-Comparator比较器-中文排序
阅读量:4298 次
发布时间:2019-05-27

本文共 2868 字,大约阅读时间需要 9 分钟。

文章目录

Java-Comparator比较器-中文排序

一、前言

  • JDK:1.8
  • 参考:

二、正文

通过实现 Comparator 接口,实现数字排序和中文排序

  • [ java.util.List ].stream().sorted( … ) … ;

  • Collections.sort( … );

  • 示例
package com.test.java;import java.text.Collator;import java.util.*;import java.util.stream.Collectors;public class SortDemo {
public static void main(String[] args) {
// 初始化数据 List
> datas = initData(); // 排序前 System.out.println("=== 排序前"); datas.forEach(System.out::println); // collections // collectionsSort(datas, "name"); // collectionsSortForLamda(datas, "name"); // stream datas = streamSortByChinese(datas, "name"); // datas = streamSortByNum(datas, "age"); // 排序后 System.out.println("=== 排序后"); datas.forEach(System.out::println); } /** * stream 中文排序 * @param datas 列表数据 * @param mKey List 中 Map 的 key * @return * */ public static List
> streamSortByChinese(List
> datas, String mKey){ return datas.stream().sorted((m1, m2) -> { String name1 = m1.get(mKey).toString(); String name2 = m2.get(mKey).toString(); Collator collator = Collator.getInstance(Locale.CHINA); return collator.compare(name1, name2); }).collect(Collectors.toList()); } /** * stream 数字排序 * @param datas 列表数据 * @param mKey List 中 Map 的 key * @return * */ public static List
> streamSortByNum(List
> datas, String mKey){ return datas.stream().sorted((o1, o2) -> o1.get(mKey).toString().compareTo(o2.get(mKey).toString()) ).collect(Collectors.toList()); } /** * Collections 中文排序 * @param datas 列表数据 * @param mKey List 中 Map 的 key * @return * */ public static void collectionsSort(List
> datas, String mKey){ Collections.sort(datas, new Comparator
>() { @Override public int compare(Map
o1, Map
o2) { String name1 = o1.get(mKey).toString(); String name2 = o2.get(mKey).toString(); Collator collator = Collator.getInstance(Locale.CHINA); return collator.compare(name1, name2); } }); } /** * Collections 中文排序- Lamda 实现 * @param datas 列表数据 * @param mKey List 中 Map 的 key * @return * */ public static void collectionsSortForLamda(List
> datas, String mKey){ Collections.sort(datas, (o1, o2) -> { String name1 = o1.get(mKey).toString(); String name2 = o2.get(mKey).toString(); Collator collator = Collator.getInstance(Locale.CHINA); return collator.compare(name1, name2); }); } /** * 初始化数据 * @return * */ public static List
> initData(){ // 需要排序的列表 List
> datas = new ArrayList<>(); // 示例数据 Map
map1 = new HashMap<>(); map1.put("name", "李一"); map1.put("age", 18); datas.add(map1); Map
map2 = new HashMap<>(); map2.put("name", "左二"); map2.put("age", 20); datas.add(map2); Map
map3 = new HashMap<>(); map3.put("name", "张三"); map3.put("age", 26); datas.add(map3); Map
map4 = new HashMap<>(); map4.put("name", "戴四"); map4.put("age", 22); datas.add(map4); return datas; }}

转载地址:http://kznws.baihongyu.com/

你可能感兴趣的文章
vue中 不更新视图 四种解决方法
查看>>
MySQL 查看执行计划
查看>>
OpenGL ES 3.0(四)图元、VBO、VAO
查看>>
OpenGL ES 3.0(五)纹理
查看>>
OpenGL ES 3.0(八)实现带水印的相机预览功能
查看>>
OpenGL ES 3.0(九)实现美颜相机功能
查看>>
FFmpeg 的介绍与使用
查看>>
Android 虚拟机简单介绍——ART、Dalvik、启动流程分析
查看>>
原理性地理解 Java 泛型中的 extends、super 及 Kotlin 的协变、逆变
查看>>
FFmpeg 是如何实现多态的?
查看>>
FFmpeg 源码分析 - avcodec_send_packet 和 avcodec_receive_frame
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>