当前位置: 首页 > news >正文

做网站的公司 杭州网站建设完成确认函

做网站的公司 杭州,网站建设完成确认函,苏州企业网站建设开发与制作,如何免费域名注册我们都知道TreeMap可以根据key按字典升序排序。但在某些场景下,我们需要自定义排序规则,为了代码优雅一些,我们也希望在stream中groupingBy时自定义排序规则,就可以参考本文的实现。 1. 使用TreeMap默认的排序规则(按…

我们都知道TreeMap可以根据key按字典升序排序。但在某些场景下,我们需要自定义排序规则,为了代码优雅一些,我们也希望在stream中groupingBy时自定义排序规则,就可以参考本文的实现。

1. 使用TreeMap默认的排序规则(按字典升序排序)

先来看一下默认的排序规则。

/*** 使用TreeMap默认的排序规则(按字典升序排序)*/
private static void sortByDefault() {TreeMap<String, Integer> treeMap = new TreeMap<>();for (int index = 0; index < 5; index++) {treeMap.put("str_" + index, index);}System.out.println("*****TreeMap默认排序规则*****");treeMap.forEach((k, v) -> System.out.println(k + " : " + v));System.out.println();
}

2. 使用自定义排序规则

使用自定义排序规则对TreeMap进行实例化。

/*** 使用自定义排序规则*/
private static void sortByCustom() {Comparator<String> comparator = (String s1, String s2) -> SortEnum.getSortWeightByValue(s1) - SortEnum.getSortWeightByValue(s2);TreeMap<String, Integer> treeMap = new TreeMap<>(comparator);for (int index = 0; index < 5; index++) {treeMap.put("str_" + index, index);}System.out.println("*****TreeMap自定义排序规则*****");treeMap.forEach((k, v) -> System.out.println(k + " : " + v));System.out.println();
}

3. GroupingBy时使用自定义排序规则

一开始直接用TreeMap::new作为groupingBy方法的第二个参数,但是这种办法只能引用TreeMap的无参构造方法。查看groupingBy的入参可以发现,第二个参数是Supplier类型,于是手动实现Supplier,在方法体中传入自定义比较器,然后返回TreeMap对象。

/*** GroupingBy时使用自定义排序规则*/
private static void sortWhenGroupingBy() {List<String> list = new ArrayList<>();for (int index = 0; index < 5; index++) {list.add("str_" + index);}Comparator<String> comparator = (s1, s2) -> SortEnum.getSortWeightByValue(s1) - SortEnum.getSortWeightByValue(s2);// 如果现在外面定义好Supplier,需要声明TreeMap的key和value的类型,否则可能出现类型不兼容的异常// Supplier<TreeMap<String, List<String>>> supplier = () -> new TreeMap<>(comparator);// TreeMap<String, List<String>> treeMap = list.stream().collect(Collectors.groupingBy(Function.identity(), supplier, Collectors.toList()));TreeMap<String, List<String>> treeMap = list.stream().collect(Collectors.groupingBy(Function.identity(), () -> new TreeMap<>(comparator), Collectors.toList()));System.out.println("*****GroupingBy时自定义排序规则*****");treeMap.forEach((k, v) -> System.out.println(k + " : " + v));System.out.println();
}

完整代码

自定义排序权重类

public enum SortEnum {ZERO(0, "str_1"),FIRST(1, "str_0"),SECOND(2, "str_3"),THREE(3, "str_2"),;private int sortWeight;private String value;SortEnum(int sortWeight, String value) {this.sortWeight = sortWeight;this.value = value;}public static int getSortWeightByValue(String value) {for (SortEnum sortEnum : SortEnum.values()) {if (sortEnum.value.equals(value)) {return sortEnum.sortWeight;}}return Integer.MAX_VALUE;}
}

测试代码

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;public class TestTreeMap {public static void main(String[] args) {sortByDefault();sortByCustom();sortWhenGroupingBy();}/*** 使用TreeMap默认的排序规则(按字典升序排序)*/private static void sortByDefault() {TreeMap<String, Integer> treeMap = new TreeMap<>();for (int index = 0; index < 5; index++) {treeMap.put("str_" + index, index);}System.out.println("*****TreeMap默认排序规则*****");treeMap.forEach((k, v) -> System.out.println(k + " : " + v));System.out.println();}/*** 使用自定义排序规则*/private static void sortByCustom() {Comparator<String> comparator = (String s1, String s2) -> SortEnum.getSortWeightByValue(s1) - SortEnum.getSortWeightByValue(s2);TreeMap<String, Integer> treeMap = new TreeMap<>(comparator);for (int index = 0; index < 5; index++) {treeMap.put("str_" + index, index);}System.out.println("*****TreeMap自定义排序规则*****");treeMap.forEach((k, v) -> System.out.println(k + " : " + v));System.out.println();}/*** GroupingBy时使用自定义排序规则*/private static void sortWhenGroupingBy() {List<String> list = new ArrayList<>();for (int index = 0; index < 5; index++) {list.add("str_" + index);}Comparator<String> comparator = (s1, s2) -> SortEnum.getSortWeightByValue(s1) - SortEnum.getSortWeightByValue(s2);// 如果现在外面定义好Supplier,需要声明TreeMap的key和value的类型,否则可能出现类型不兼容的异常// Supplier<TreeMap<String, List<String>>> supplier = () -> new TreeMap<>(comparator);// TreeMap<String, List<String>> treeMap = list.stream().collect(Collectors.groupingBy(Function.identity(), supplier, Collectors.toList()));TreeMap<String, List<String>> treeMap = list.stream().collect(Collectors.groupingBy(Function.identity(), () -> new TreeMap<>(comparator), Collectors.toList()));System.out.println("*****GroupingBy时自定义排序规则*****");treeMap.forEach((k, v) -> System.out.println(k + " : " + v));System.out.println();}
}

运行结果:

*****TreeMap默认排序规则*****
str_0 : 0
str_1 : 1
str_2 : 2
str_3 : 3
str_4 : 4*****TreeMap自定义排序规则*****
str_1 : 1
str_0 : 0
str_3 : 3
str_2 : 2
str_4 : 4*****GroupingBy时自定义排序规则*****
str_1 : [str_1]
str_0 : [str_0]
str_3 : [str_3]
str_2 : [str_2]
str_4 : [str_4]
http://www.yayakq.cn/news/456512/

相关文章:

  • 湖南麟辉建设集团有限公司网站怎么用小皮创建网站
  • 网页模板建站系统建筑公司企业简介
  • 用猴子做标志起网站名叫什么好如何开发软件app
  • 常州网站搭建公司wordpress 实时表单
  • 搭建网站一般要多少钱帝国怎么做网站
  • 如何攻击网站ui培训机构排名
  • 松岗建网站百度快照怎么打开
  • 郑州网站建设如何注册营业执照申请
  • xxx网站建设规划书做网站为什么要域名 解析绑定
  • 企业建设网站项目背景wordpress 怎么改中文
  • 客户评价网站建设网站做支付宝接口
  • 建设银行手机银行银行下载官方网站做推广要知道的网站
  • 查询网站dns服务器服装网站建设图
  • 长沙多用户商城网站建设泰安市建设局
  • 开发 程序网站福田公司总部
  • 安徽省住房建设部官方网站网站开发数据流程图怎么画
  • 中山手机网站建设网站建设seo优化培训
  • 如何设计好酒店网站模板wordpress出现开玩笑
  • 都匀住房和城乡建设局网站商场大型话题活动策划网站
  • arvixe wordpress娄底哪里学习网站建设和seo
  • 定制礼品的网站有哪些学建筑的网站
  • 泉州网站建设泉州大连建设网站的公司
  • 帝国cms7.0模板 绿色企业网站模板(整站带数据)威海做网站的公司有哪些
  • 国内比较知名的大型门户网站信阳网站建设策划方案
  • 重庆网站建设模板服务wordpress函数调用函数
  • 软件分享网站个人信息网站模板
  • 深圳的网站郑州网站优化的微博_腾讯微博
  • 网站建设链接演示网站开发的难点与重点
  • 猪八戒网网站设计网站设计这个专业怎么样
  • 有哪些可以在线做海报的网站wordpress允许特定