Map可以先按照value进行排序,然后按照key进行排序。 或者先按照key进行排序,然后按照value进行排序,这都是可以的。

并且,大家可以制定自己的排序规则。 按单个value排序:

import java.util.Collections;

import java.util.HashMap;

import java.util.LinkedHashMap;

import java.util.Map;

import static java.util.Map.Entry.comparingByValue;

import static java.util.stream.Collectors.toMap;

public class SortTest {

public static void main(String[] args) throws Exception {

// 创建一个字符串为Key,数字为值的map

Map budget = new HashMap<>();

budget.put("clothes", 120);

budget.put("grocery", 150);

budget.put("transportation", 100);

budget.put("utility", 130);

budget.put("rent", 1150);

budget.put("miscellneous", 90);

System.out.println("排序前: " + budget);

// 按值排序 升序

Map sorted = budget

.entrySet()

.stream()

.sorted(comparingByValue())

.collect(

toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2,

LinkedHashMap::new));

System.out.println("升序按值排序后的map: " + sorted);

// 按值排序降序

sorted = budget

.entrySet()

.stream()

.sorted(Collections.reverseOrder(comparingByValue()))

.collect(

toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e2,

LinkedHashMap::new));

System.out.println("降序按值排序后的map: " + sorted);

}

}

按多个value排序:

data = data.stream().sorted(Comparator.comparing(o -> {

StringBuffer key = new StringBuffer();

fieldList.stream().forEach((a)-> {

key.append(o.get(a)+"");

});

return key.toString();

} )).collect(Collectors.toList());

下面的代码中,首先按照value的数值从大到小进行排序,当value数值大小相同时,再按照key的长度从长到短进行排序,这个操作与Stream流式操作相结合。

/**

* Map按照整数型的value进行降序排序,当value相同时,按照key的长度进行排序

*

* @param map

* @return

*/

public static LinkedHashMap sortMap(Map map) {

return map.entrySet().stream().sorted(((item1, item2) -> {

int compare = item2.getValue().compareTo(item1.getValue());

if (compare == 0) {

if (item1.getKey().length() < item2.getKey().length()) {

compare = 1;

} else if (item1.getKey().length() > item2.getKey().length()) {

compare = -1;

}

}

return compare;

})).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));

}

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: