java map对象排序输出_Map按照条件排序输出

1 importjava.util.ArrayList;2 importjava.util.Collections;3 importjava.util.Comparator;4 importjava.util.HashMap;5 importjava.util.Iterator;6 importjava.util.LinkedHashMap;7 importjava.util.List;8 importjava.util.Map;9 importjava.util.Map.Entry;10 importjava.util.TreeMap;11

12 /**

13 * Map进行多条件排序输出14 * 水果具有好吃不好吃难吃属性。15 * 入口Map16 * 首先按照好吃不好吃难吃排序17 * 然后按照水果的标志Id排序18 * 出口Map19 *20 * 2016年8月14日21 */

22 public classMainSort {23

24 /**

25 * 主方法26 *@paramargs27 */

28 public static voidmain(String[] args) {29 //获取Map

30 Map fruitMap =getFruitMap();31 //打印未排序的Map

32 show(fruitMap);33 System.out.println("-----------before-----------");34 //打印排序完了的Map

35 show(MainSort.sortMapByValue(fruitMap));36 System.out.println("-----------after------------");37 }38

39 /**

40 * 循环打印Map41 */

42 private static void show(MapfruitMap) {43 //循环Map

44 for (Map.EntryfruitOneMap : fruitMap.entrySet()) {45 Fruit fruit =fruitOneMap.getValue();46 System.out.println(fruit.getFruitName() + " " + fruit.getFruitTaste()+ " " +fruit.getId() );47 }48 }49

50 /**

51 * 准备参数52 *@return

53 */

54 private static MapgetFruitMap() {55 Map fruitMap = new TreeMap<>();56

57 //创建对象

58 Fruit b = new Fruit("苹果" , FruitTaste.HAOCHI, "b");59 Fruit a = new Fruit("梨子" , FruitTaste.YIBAN , "a");60 Fruit c = new Fruit("香蕉" , FruitTaste.HAOCHI, "c");61 Fruit d = new Fruit("桃子" , FruitTaste.HAOCHI, "d");62 Fruit e = new Fruit("橘子" , FruitTaste.NANGCHI , "e");63 Fruit f = new Fruit("杨梅" , FruitTaste.YIBAN , "f");64 Fruit g = new Fruit("黑李" , FruitTaste.NANGCHI , "g");65 Fruit h = new Fruit("火龙果", FruitTaste.HAOCHI, "h");66 Fruit i = new Fruit("西瓜" , FruitTaste.YIBAN, "i");67

68 //乱序key值

69 fruitMap.put("xniem", b);70 fruitMap.put("asdf", i);71 fruitMap.put("akgjjd", c);72 fruitMap.put("uiooo", f);73 fruitMap.put("qw84", a);74 fruitMap.put("5845uasdf'", d);75 fruitMap.put("48aisdf", e);76 fruitMap.put("458kljsf", g);77 fruitMap.put("4jalsdfj", h);78

79 returnfruitMap;80 }81

82 /**

83 * 由于List能够直接使用Collections进行排序84 * 但是Map不行。85 * 这边所做的操作就是先将Map--》List86 * 然后对List进行排序87 * 然后在讲List--》转换成Map88 *@parammap89 *@return

90 */

91 public static Map sortMapByValue(MapfruitMap) {92 if (fruitMap == null ||fruitMap.isEmpty()) {93 return null;94 }95 //LinkedhashMap是有序的、或者TreeMap都是有序的

96 Map sortedMap = new LinkedHashMap();97 List> entryList = new ArrayList>(fruitMap.entrySet());98 Collections.sort(entryList, newMapValueComparator());99 Iterator> iter =entryList.iterator();100 Map.Entry tmpEntry = null;101 while(iter.hasNext()) {102 tmpEntry =iter.next();103 sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());104 }105 returnsortedMap;106 }107 }108

109

110

111 /**

112 * 比较器规则类113 * 传入对应的Map进行比较114 *@authorelcapitan115 */

116 class MapValueComparator implements Comparator>{117

118 @Override119 public int compare(Entry o1, Entryo2) {120

121 //获取比较的两个对象

122 Fruit fruit1 =o1.getValue();123 Fruit fruit2 =o2.getValue();124

125 //将好吃,难吃映射成具有比较关系的字符1、2、3

126 Map tasteLev = new HashMap<>();127 tasteLev.put(FruitTaste.HAOCHI, 1);128 tasteLev.put(FruitTaste.YIBAN, 2);129 tasteLev.put(FruitTaste.NANGCHI, 3);130

131 int cr = 0;132 //判断好吃不好吃

133 int a = tasteLev.get(fruit2.getFruitTaste())-tasteLev.get(fruit1.getFruitTaste());134 if (a!=0) {135 cr = (a>0) ? -1 : 2;136 } else{137 //按照对应的Id排序

138 a =fruit2.getId().compareTo(fruit1.getId());139 if (a!=0) {140 cr = (a>0)? -2 : 1;141 }142 }143 /*注意上面对一个返回值对应的就是形成比较层次144 * 上层145 * --> 2146 * --> -1147 * 下层148 * --> 1149 * --> -2150 */

151 returncr;152 }153 }154

155 /**

156 * 水果实体类157 * 包含水果名称、水果好吃程度、水果标志158 *@authorelcapitan159 */

160 classFruit {161 privateString fruitName;162 privateString fruitTaste;163 privateString id;164 publicString getFruitName() {165 returnfruitName;166 }167 public voidsetFruitName(String fruitName) {168 this.fruitName =fruitName;169 }170 publicString getFruitTaste() {171 returnfruitTaste;172 }173 public voidsetFruitTaste(String fruitTaste) {174 this.fruitTaste =fruitTaste;175 }176 publicString getId() {177 returnid;178 }179 public voidsetId(String id) {180 this.id =id;181 }182 publicFruit(String fruitName, String fruitTaste, String id) {183 super();184 this.fruitName =fruitName;185 this.fruitTaste =fruitTaste;186 this.id =id;187 }188 }189

190 /**

191 * 水果好吃程度常量类192 * 包括好吃、一般、不好吃193 * 可以继续添加194 *@authorelcapitan195 */

196 classFruitTaste {197 public static final String HAOCHI = "好吃";198 public static final String NANGCHI = "难吃";199 public static final String YIBAN = "一般";200 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值