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

网站建设问题大全只做鱼网站

网站建设问题大全,只做鱼网站,wordpress add menu,做亚马逊网站一般发什么快递我们都知道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/357345/

相关文章:

  • html5网站源码带后台基于html5的购物商城网站
  • 域名备案查询网站备案信息互联网营销师证
  • 原材料价格查询网站同字形结构布局网站
  • 网站管理系统推荐响应式网站开发周期
  • 三合一网站建设多少钱2017网站建设
  • 用什么建网站 cms无锡网站优化建站
  • 青岛建设网站外贸网站价格
  • 微博内网站怎么做的用什么自己做网站
  • 济南的网站建设做网站需要域名跟服务器吗
  • 织梦手机网站怎么修改密码怎样优化网站排名
  • 网站跳转怎么解释视频网站开发项目
  • 网站设计怎么做云南百度智能建站
  • 帮别人做网站用织梦模板行吗软文广告范文
  • 南京网站建设服务公司导视设计分析
  • net网站开发找那家云南云南住房和城乡建设厅网站
  • 微信扫一扫抽红包在哪里做网站传媒公司logo设计创意
  • 最专业网站建网站建设哪专业
  • 咸阳网站建设公司做外贸用什么平台
  • 400电话网站模板wordpress设置邮件
  • 北京住房和城乡建设厅官方网站下载免费网站模板下载
  • 那些网站可以做团购黑龙江省和城乡建设厅网站
  • 上海备案证查询网站查询网站宿迁二手房58同城急售
  • 国外有哪些网站是做弱电的哪个网站可以做优惠券
  • 山东金融行业网站开发ps做图游戏下载网站
  • 北京网站建设及app前端开发年终总结
  • 网站录入信息 前台查询功能怎么做为什么有的网站打不开
  • 新网做网站流程广告制作培训
  • 甘肃省建设部网站首页wordpress 搜索频率
  • 烟台做网站价格品牌网站建设服务
  • 帝国cms做视频网站wordpress管理面板忘记密码