-
Notifications
You must be signed in to change notification settings - Fork 6
/
MapUtil.java
64 lines (56 loc) · 1.73 KB
/
MapUtil.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.TreeMap;
import java.util.Comparator;
/**
Utilities for working with Java maps (dictionaries).
For theory, see: https://en.wikipedia.org/wiki/Associative_array
@author Daniel R. Collins (dcollins@superdan.net)
@since 2017-08-02
*/
public class MapUtil {
//--------------------------------------------------------------------------
// Methods
//--------------------------------------------------------------------------
/**
Return a SortedSet of a Map based on Comparable values.
From: https://stackoverflow.com/questions/2864840/treemap-sort-by-value
*/
static <K, V extends Comparable<? super V>>
SortedSet<Map.Entry<K, V>>
entriesSortedByValues(Map<K, V> map, boolean reverse)
{
SortedSet<Map.Entry<K, V>> sortedEntries = new TreeSet<Map.Entry<K, V>>(
new Comparator<Map.Entry<K, V>>() {
/** Compare two map enties. */
public int compare(Map.Entry<K, V> e1, Map.Entry<K, V> e2) {
int res = e1.getValue().compareTo(e2.getValue());
if (reverse) {
res = -res;
}
return res != 0 ? res : 1;
}
}
);
sortedEntries.addAll(map.entrySet());
return sortedEntries;
}
/**
Main test method.
*/
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put("A", 2);
map.put("B", 3);
map.put("C", 1);
map.put("D", 2);
System.out.println(map);
System.out.println(entriesSortedByValues(map, false));
System.out.println(entriesSortedByValues(map, true));
}
/*
If the sorting method above is somehow deficient, consider instead:
https://stackoverflow.com/q/109383
*/
}